제출 #1166399

#제출 시각아이디문제언어결과실행 시간메모리
1166399NewtonabcPalindrome-Free Numbers (BOI13_numbers)C++20
100 / 100
1 ms400 KiB
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll dp[20][12][12][2];
//index,first last,second last,fix element?
ll f(int idx,int first,int second,bool con,string &s){
    if(idx==s.size()) return 1;
    if(dp[idx][first][second][con]!=-1) return dp[idx][first][second][con];
    ll ret=0;
    int now=con?s[idx]-'0':9;
    for(int i=0;i<=now;i++){
        if(i==first || i==second) continue;
        if(i==0 && first==10) ret+=f(idx+1,10,10,i==now && con,s);
        else ret+=f(idx+1,i,first,i==now && con,s);
    }
    return dp[idx][first][second][con]=ret;
}
ll solve(ll n){
    if(n<0LL) return 0;
    for(int i=0;i<20;i++) for(int j=0;j<12;j++) for(int ii=0;ii<12;ii++) dp[i][j][ii][0]=dp[i][j][ii][1]=-1;
    string s=to_string(n);
    //true=fix constraint not exceed its value
    return f(0,10,10,true,s);

}
int main(){
    ll a,b;
    cin>>a >>b;
    ll ans=solve(b)-solve(a-1LL);
    cout<<ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...