제출 #1173589

#제출 시각아이디문제언어결과실행 시간메모리
1173589AlgorithmWarriorPalindrome-Free Numbers (BOI13_numbers)C++20
100 / 100
0 ms328 KiB
#include <bits/stdc++.h> using namespace std; long long dp[23][13][13][2]; int cifre[23]; long long digit_dp(long long val){ if(val<10) return val+1; int nrc=0; while(val){ cifre[++nrc]=val%10; val/=10; } int cif1,cif2,cif3,nrcif; for(cif1=0;cif1<10;++cif1) for(cif2=0;cif2<10;++cif2) if(cif1!=cif2){ dp[2][cif1][cif2][0]=1; if(10*cif1+cif2<=10*cifre[2]+cifre[1]) dp[2][cif1][cif2][1]=1; else dp[2][cif1][cif2][1]=0; } for(nrcif=3;nrcif<=nrc;++nrcif) for(cif1=0;cif1<10;++cif1) for(cif2=0;cif2<10;++cif2) if(cif1!=cif2){ dp[nrcif][cif1][cif2][0]=0; dp[nrcif][cif1][cif2][1]=0; for(cif3=0;cif3<10;++cif3) if(cif1!=cif3){ if(cif1>cifre[nrcif]) dp[nrcif][cif1][cif2][0]+=dp[nrcif-1][cif2][cif3][0]; else if(cif1<cifre[nrcif]){ dp[nrcif][cif1][cif2][0]+=dp[nrcif-1][cif2][cif3][0]; dp[nrcif][cif1][cif2][1]+=dp[nrcif-1][cif2][cif3][0]; } else{ dp[nrcif][cif1][cif2][0]+=dp[nrcif-1][cif2][cif3][0]; dp[nrcif][cif1][cif2][1]+=dp[nrcif-1][cif2][cif3][1]; } } } long long ans=10; for(nrcif=2;nrcif<=nrc;++nrcif) for(cif1=1;cif1<10;++cif1) for(cif2=0;cif2<10;++cif2) ans+=dp[nrcif][cif1][cif2][nrcif==nrc]; return ans; } int main() { long long a,b; cin>>a>>b; cout<<digit_dp(b)-digit_dp(a-1); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...