Submission #442122

#TimeUsernameProblemLanguageResultExecution timeMemory
442122keertanPalindrome-Free Numbers (BOI13_numbers)C++17
66.67 / 100
1 ms384 KiB
#include<bits/stdc++.h> using namespace std; //#define int int64_t const int64_t mod=1000000007; namespace personal{ template<typename T> int32_t sz(T x){return x.size();} void equal(string &s,string &s1){ string ex(sz(s1)-sz(s),'0'); s=ex+s; } void equal(string &s,int x){ string ex(x-sz(s),'0'); s=ex+s; } void minus(string &s){ int32_t n=sz(s); n--; while(n+1 && s[n]=='0'){s[n]='9',n--;} s[n]--; } void base_converter(int base,string &s,int x){ s.clear(); while(x){ s+=(char)((x%base)+'0'); x/=base; } reverse(s.begin(),s.end()); //cerr<<s<<"\n"; } }; const int N=20,bl=2; int cache[20][11][11][bl][bl][bl]; int n; string s,s1; int dp(int pos,int prv,int prv1,bool bigA,bool smallB,bool nonzero){ //cerr<<pos<<" "<<prv<<" "<<bigA<<" "<<smallB<<" "<<n<<"\n"; if (n==pos){ //cout<<p<<"\n"; return 1; } int &ans=cache[pos][prv1+1][prv+1][bigA][smallB][nonzero]; if (ans!=-1){return ans;} ans=0; for (int i=0;i<10;i++){ //cerr<<pos<<" "<<prv<<" "<<bigA<<" "<<smallB<<"\n"; if (!bigA && i<(s[pos]-'0')){continue;} if (!smallB && i>(s1[pos]-'0')){continue;} if (!nonzero && !i){ ans+=dp(pos+1,prv,prv1,bigA||(i>(s[pos]-'0')),smallB||(i<(s1[pos]-'0')),nonzero||i); continue; } if (prv!=i && prv1!=i){ ans+=dp(pos+1,prv1,i,bigA||(i>(s[pos]-'0')),smallB||(i<(s1[pos]-'0')),nonzero||i); } } return ans; } void solve(int fuck){ cin>>s>>s1; //cerr<<s<<" "<<s1; memset(cache,-1,sizeof(cache)); personal::equal(s,s1); n=personal::sz(s1); cout<<dp(0,-1,-1,0,0,0); } int32_t main(){ ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr); int tq=1; //cin>>tq; for (int i=1;i<=tq;i++){ solve(i); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...