# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1008171 | ezzzay | Palindrome-Free Numbers (BOI13_numbers) | C++14 | 824 ms | 428 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define ss second
#define pb push_back
int find(int n){
if(n<=0)return n;
string s= to_string(n);
int N=s.size();
int dp[20][10][10][2];
for(int i=0;i<20;i++){
for(int j=0;j<10;j++){
for(int p=0;p<10;p++){
for(int z=0;z<2;z++)dp[i][j][p][z]=0;
}
}
}
for(int i=1;i<10;i++){
for(int j=0;j<10;j++){
if(i>s[0]-'0')break;
if(i==j)continue;
if(i==s[0]-'0' and j==s[1]-'0'){
dp[1][i][j][1]+=1;
break;
}
dp[1][i][j][0]++;
}
}
for(int i=2;i<N;i++){
for(int j=0;j<10;j++){
for(int p=0;p<10;p++){
for(int k=0;k<10;k++){
for(int z=0;z<2;z++){
if(z==1 and k> s[i]-'0')continue;
if(k!=p and j!=k)dp[i][p][k][z and (s[i]-'0'==k)]+=dp[i-1][j][p][z];
}
}
}
}
}
int ans=0;
for(int i=0;i<10;i++){
for(int j=0;j<10;j++){
for(int z=0;z<2;z++){
ans+=dp[N-1][i][j][z];
}
}
}
return ans;
}
int fun(int n){
int k=0;
int g= to_string(n).size();
while(n>0){
k+=find(n);
//cout<<n<<" "<<endl;
g--;
n=0;
for(int i=0;i<g;i++){
n*=10;
n+=9;
}
}
return k;
}
bool check(string s){
for(int i=0;i<s.size()-1;i++){
if(s[i]==s[i+1]){
return 0;
}
}
for(int i=0;i<s.size()-2;i++){
if(s[i]==s[i+2]){
return 0;
}
}
return 1;
}
void sbtsk(int a, int b){
int t=0;
for(int i=a;i<=b;i++){
if(check(to_string(i))){
t++;
}
}
cout<<t;
}
signed main(){
int a,b;
cin>>a>>b;
if(b-a<=5e7){
sbtsk(a,b);
return 0;
}
cout<<fun(b)-fun(a-1);
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |