Submission #979263

#TimeUsernameProblemLanguageResultExecution timeMemory
979263batsukh2006Palindrome-Free Numbers (BOI13_numbers)C++17
100 / 100
1 ms600 KiB
#include<iostream>
#include<stdio.h>
#include<math.h>
#include<map>
#include<string>
#include<algorithm>
#include<vector>
#include<string.h>
#include<utility>
#include<set>
#include<cmath>
#include<queue>
#include<deque>
#include<functional>
#include<stack>
#include<limits.h>
#include<iomanip>
#include<unordered_map> 
#include<numeric>
#include<tuple>
using namespace std;
 
#define MOD 1000000007
#define int long long
#define endl '\n'
int solve(int n){
	if(n<=0) return n;
	string s=to_string(n);
	int N=s.size();
	int dp[N][11][11][2]={0};
	for(int i=0; i<N; i++){
		for(int j=1; j<10; j++){
			if(i==0&&j==s[i]-'0'){
				dp[i][10][j][1]=1;
				break;
			}
			dp[i][10][j][0]=1;
		}
		if(i==0) continue;
		for(int j=0; j<10; j++){
			for(int k=0; k<10; k++){
				for(int l=0; l<=10; l++){
					for(int z=0; z<2; z++){
						if(z>0&&j>s[i]-'0') continue;
						if(j!=k&&j!=l) dp[i][k][j][z&&(j==s[i]-'0')]+=dp[i-1][l][k][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;
}
void solve(){
    int a,b; cin>>a>>b;
    cout<<solve(b)-solve(a-1);
}
signed main(){
    // freopen("248.in", "r", stdin);
    // freopen("248.out", "w", stdout);
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    
    int t=1;
//    cin>>t;
    while(t--){
        solve();
        cout<<endl;
    }
    return 0;
}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...