Submission #884719

#TimeUsernameProblemLanguageResultExecution timeMemory
88471912345678Palindrome-Free Numbers (BOI13_numbers)C++17
62.92 / 100
1 ms604 KiB
#include <bits/stdc++.h>

using namespace std;

#define ll long long

ll dp[2][19][11][11], a, b;

ll query(ll x)
{
    for (int i=0; i<2; i++) for (int j=0; j<19; j++) for (int k=0; k<=10; k++) for (int l=0; l<=10; l++) dp[i][j][k][l]=0;
    int digit=-1, vl, 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';
    //for (int i=51; i<150; i++) cout<<i<<' '<<query(i)<<'\n';
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...