Submission #240587

#TimeUsernameProblemLanguageResultExecution timeMemory
240587nafis_shifatPalindrome-Free Numbers (BOI13_numbers)C++14
100 / 100
6 ms384 KiB
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll dp[19][11][11][2]={};
int len;
int ar[19];

ll DP(int pos,int m1,int m2,int sm) {
    
    ll &ret=dp[pos][m1+1][m2+1][sm];
    if(len==pos) {
        ret=1;
        return 1;
    }
    if(ret!=-1)return ret;
    ret=0;
    int mx=sm?9:ar[pos];
    for(int i=0;i<mx;i++) {
        if(i!=m1&&i!=m2)
            ret+=DP(pos+1,m2,i,1);
    }
    if(mx!=m2 && mx!=m1)
        ret+=DP(pos+1,m2,mx,sm);
    return ret;
    
}


ll calc(ll a) {
    if(a<=9)return a+1;
    memset(dp,-1,sizeof dp);
    len=0;
    while(a) {
        ar[len++]=a%10;
        a/=10;
    }
    reverse(ar,ar+len);
    ll res=DP(0,0,-1,0);
    for(int i=1;i<=len;i++)res+=DP(i,0,-1,1);
    return res;
    
}
int main() {
    ll a,b;
    cin>>a>>b;
    if(a<b)
        swap(a,b);
        
    ll pd=calc(a)-calc(b-1);
    cout<<pd<<endl;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...