Submission #1008142

#TimeUsernameProblemLanguageResultExecution timeMemory
1008142ezzzayPalindrome-Free Numbers (BOI13_numbers)C++14
71.25 / 100
1 ms604 KiB
#include<bits/stdc++.h>
using namespace std;
#define int long long 
#define ss second
#define pb push_back
int fun(int n){
    if(n<=0)return n;
    string s= to_string(n);
    
    int N=s.size();
    int dp[20][10][10][2];
    for(int i=0;i<20;i++){
        for(int j=0;j<10;j++){
            for(int p=0;p<10;p++){
                for(int z=0;z<2;z++)dp[i][j][p][z]=0;
            }
            
        }
    }
    
    for(int i=1;i<10;i++){
        for(int j=0;j<10;j++){
            if(i>s[0]-'0')break;
            if(i==j)continue;
            if(i==s[0]-'0' and j==s[1]-'0'){
                dp[1][i][j][1]+=1;
                break;
            }
            dp[1][i][j][0]++;
        }
    }
    for(int i=2;i<N;i++){
        for(int j=0;j<10;j++){
            for(int p=0;p<10;p++){
                for(int k=0;k<10;k++){
                    for(int z=0;z<2;z++){
                       if(z==1 and k> s[i]-'0')continue;
                       if(k!=p and j!=k)dp[i][p][k][z and (s[i]-'0'==k)]+=dp[i-1][j][p][z];
                    }
                }
            }
        }
    }
    int ans=0;
    for(int i=0;i<10;i++){
        for(int j=0;j<10;j++){
            for(int z=0;z<2;z++){
                ans+=dp[N-1][i][j][z];
            }
        }
    }
    
    return ans;
    
}
signed main(){
    int a,b;
    cin>>a>>b;
    cout<<fun(b)-fun(a-1);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...