Submission #884722

#TimeUsernameProblemLanguageResultExecution timeMemory
88472212345678Palindrome-Free Numbers (BOI13_numbers)C++17
100 / 100
1 ms600 KiB
#include <bits/stdc++.h>
 
using namespace std;
 
#define ll long long
 
ll dp[2][22][11][11], a, b;
 
ll query(ll x)
{
    if (x==-1) return -1;
    for (int i=0; i<2; i++) for (int j=0; j<22; j++) for (int k=0; k<=10; k++) for (int l=0; l<=10; l++) dp[i][j][k][l]=0;
    ll digit=-1, vl=0, res=0;
    while (x>0)
    {
        vl=x%10;
        x/=10;
        digit++;
        if (digit==0)
        {
            for (int i=0; i<10; i++) dp[0][digit][10][i]=1;
            for (int i=0; i<=vl; i++) dp[1][digit][10][i]=1; 
        }
        if (digit==1)
        {
            for (int i=0; i<10; i++)
            {
                for (int j=0; j<10; j++)
                {
                    if (i!=j) dp[0][digit][i][j]+=dp[0][digit-1][10][i];
                }
            }
            for (int i=0; i<10; i++)
            {
                for (int j=0; j<vl; j++)
                {
                    if (i!=j) dp[1][digit][i][j]+=dp[0][digit-1][10][i];
                }
            }
            for (int i=0; i<10; i++) if (i!=vl) dp[1][digit][i][vl]+=dp[1][digit-1][10][i];
        }
        if (digit>=2)
        {
            for (int i=0; i<10; i++)
            {
                for (int j=0; j<10; j++)
                {
                    for (int k=0; k<10; k++) if (i!=j&&k!=j) dp[0][digit][i][j]+=dp[0][digit-1][k][i];
                }
            }
            for (int i=0; i<10; i++)
            {
                for (int j=0; j<vl; j++)
                {
                    for (int k=0; k<10; k++) if (i!=j&&k!=j) dp[1][digit][i][j]+=dp[0][digit-1][k][i];
                }
            }
            for (int i=0; i<10; i++) for (int k=0; k<10; k++) if (i!=vl&&vl!=k) dp[1][digit][i][vl]+=dp[1][digit-1][k][i];
        }
        /*
        cout<<"here "<<digit<<'\n';
        for (int i=0; i<=10; i++) 
        {
            for (int j=0; j<=10; j++) cout<<dp[0][digit][i][j]<<' ';
            cout<<'\n';
        }
        cout<<"here2 "<<digit<<'\n';
        for (int i=0; i<=10; i++) 
        {
            for (int j=0; j<=10; j++) cout<<dp[1][digit][i][j]<<' ';
            cout<<'\n';
        }*/
        if (x!=0) for (int i=0; i<=10; i++) for (int j=1; j<=10; j++) res+=dp[0][digit][i][j];
        else for (int i=0; i<=10; i++) for (int j=1; j<=10; j++) res+=dp[1][digit][i][j];
    }
    return res;
}
 
int main()
{
    cin.tie(NULL)->sync_with_stdio(false);
    cin>>a>>b;
    cout<<query(b)-query(a-1)<<'\n';
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...