Submission #230477

#TimeUsernameProblemLanguageResultExecution timeMemory
230477alishahali1382Palindrome-Free Numbers (BOI13_numbers)C++14
100 / 100
6 ms400 KiB
#include <bits/stdc++.h> #pragma GCC optimize ("O2") #pragma GCC optimize ("unroll-loops") //#pragma GCC optimize("no-stack-protector,fast-math") using namespace std; typedef long long ll; typedef long double ld; typedef pair<int, int> pii; typedef pair<pii, int> piii; typedef pair<ll, ll> pll; #define debug(x) cerr<<#x<<'='<<(x)<<endl; #define debugp(x) cerr<<#x<<"= {"<<(x.first)<<", "<<(x.second)<<"}"<<endl; #define debug2(x, y) cerr<<"{"<<#x<<", "<<#y<<"} = {"<<(x)<<", "<<(y)<<"}"<<endl; #define debugv(v) {cerr<<#v<<" : ";for (auto x:v) cerr<<x<<' ';cerr<<endl;} #define all(x) x.begin(), x.end() #define pb push_back #define kill(x) return cout<<x<<'\n', 0; const ld eps=1e-7; const int inf=1000000010; const ll INF=10000000000000010LL; const int mod=1000000007; const int MAXN=100010, LOG=20; ll n, m, k, u, v, x, y, t, a, b, ans; ll tav10[MAXN], tav8[MAXN], dp[LOG]; int get_len(ll x){ if (!x) return 0; return 1+get_len(x/10); } ll Solve(ll num){ ll res=0, len=get_len(num); for (int i=0; i<len; i++) res+=dp[i]; vector<int> vec={-1, -1}; for (int i=len-1; ~i; i--){ ll dig=(num/tav10[i])%10; for (int j=(i==len-1); j<dig; j++) if (j!=vec.back() && j!=vec[vec.size()-2]){ if (i==len-1){ if (!i) res++; else res+=9*tav8[i-1]; } else{ res+=tav8[i]; } } if (vec.back()==dig || vec[vec.size()-2]==dig) return res; vec.pb(dig); } return res; } int main(){ ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); //freopen("input.txt", "r", stdin); //freopen("output.txt", "w", stdout); tav8[0]=tav10[0]=1; for (int i=1; i<LOG; i++){ tav8[i]=tav8[i-1]*8ll; tav10[i]=tav10[i-1]*10ll; } dp[1]=9ll; dp[2]=81ll; for (int i=3; i<LOG; i++) dp[i]=dp[i-1]*8ll; cin>>a>>b; cout<<Solve(b+1)-Solve(a)+(a==0)<<'\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...