#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
vector<int> digits(long long x){
	vector<int> d;
	if (x == 0){
		d.push_back(0);
		return d;
	}
	while (x > 0){
		d.push_back(x % 10);
		x /= 10;
	}
	reverse(d.begin(), d.end());
	return d;
}
long long nines(long long l){
	long long x = 0;
	for (int i=0;i<l;i++) x = x * 10 + 9;
	return x;
}
long long fast_count(int prev, long long l){
	long long res = 1;
	for (int i=0;i<l;i++) res *= 8;
	if (prev == 1) res = res / 8 * 9;
    return res;
}
long long palindrome_free(long long x){
	if (x < 10) return x + 1;
	vector<int> d = digits(x);
	long long count = 0;
	for (int i=0;i<d.size();i++){
        if (i == 0){
        	for (int j=1;j<d[i];j++) count += fast_count(1, (long long)d.size() - 1);
        	continue;
        }
        if (i == 1){
        	for (int j=0;j<d[i];j++){
        		if (j == d[i-1]) continue;
        		count += fast_count(2, (long long) d.size() - 2);
        	}
        	if (d[1] == d[0]) break;
        	continue;
        }
        for (int j=0;j<d[i];j++){
        	if (j == d[i-1] || j == d[i -2]) continue;
        	count += fast_count(2, (long long) d.size() - (i + 1));
        }
        if (d[i] == d[i-1] || d[i] == d[i -2]) break;
        if (i + 1 == d.size()) count += 1; 
	}
	return count + palindrome_free(nines(d.size() - 1));
}
int main(){
	long long a,b;
	cin >> a >> b;
	if (a == 0) cout << palindrome_free(b) << endl; else cout << palindrome_free(b) - palindrome_free(a - 1) << endl;
	return 0;
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |