Submission #1170515

#TimeUsernameProblemLanguageResultExecution timeMemory
1170515ZeroCoolPalindrome-Free Numbers (BOI13_numbers)C++20
100 / 100
0 ms328 KiB
#include <bits/stdc++.h>
using namespace std;;
#define ll long long
#define ar array
#define ld long double
#define int long long
#define all(v) v.begin(), v.end()

const int N = 2e5 + 20;
const int K = 469;
const int LOG = 26;
const int INF = 1e12;	
int MOD = 998244353;

void mm(int &x){x = (x % MOD + MOD) % MOD;}

int dp[20][11][11][2];
vector<int> v;

int f(int i,int l1, int l2, bool u){
	if(i == v.size())return 1;
	if(dp[i][l1][l2][u] != -1)return dp[i][l1][l2][u];
	int lim;
	if(u)lim = 9;
	else lim = v[i];
	int ans = 0;
	for(int x = 0;x <= lim;x++){
		if(x == l1 || x == l2)continue;
		bool nu = u;
		if(x < lim)nu = 1;
		if(min(l1, l2) == 10 && x == 0)ans += f(i + 1, l1, l2, nu);
		else ans += f(i + 1, x, l1, nu);
	}
	return dp[i][l1][l2][u] = ans;
}

int solve(int x){
	v.clear();
	memset(dp, -1, sizeof dp);
	while(x){
		v.push_back(x % 10);
		x /= 10;
	}
	reverse(all(v));
	//for(auto u: v)cout<<u<<" ";
//	cout<<'\n';
	return f(0, 10, 10, 0);
}

void orz(){
	int a, b;
	cin>>a>>b;
//	cout<<solve(a - 1)<<' '<<solve(b)<<'\n';
	cout<<solve(b) - solve(a - 1);
}	
signed main(){ios_base::sync_with_stdio(false);cin.tie(0);
	int t;
	//cin>>t;
	t = 1;
	while(t--)orz();
}
	
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...