#include <bits/stdc++.h>
using namespace std;
#define int long long
void TLE() { TLE(); }
string a, b;
int dfs(int i, bool big, bool lit, char last_1, char last_2){
if(i == b.size()) return 1;
if(big and lit){
int rest = b.size()-i-1, eight = 1;
while(rest--) eight *= 8;
int res = 0;
for(char j='0'; j<='9'; j++){
if(j == last_1 or j == last_2) continue;
res += eight;
}
return res;
}
if(lit){
int res = 0;
for(char j=a[i]+1; j<='9'; j++){
if(j == last_1 or j == last_2) continue;
res += dfs(i+1, true, true, last_2, j);
}
if(a[i] != last_2 and a[i] != last_1) res += dfs(i+1, false, true, last_2, a[i]);
return res;
}
if(big){
int res = 0;
for(char j='0'; j<b[i]; j++){
if(j == last_1 or j == last_2) continue;
res += dfs(i+1, true, true, last_2, j);
}
if(b[i] != last_2 and b[i] != last_1) res += dfs(i+1, true, false, last_2, b[i]);
return res;
}
if(a[i] == b[i]) {
if(last_1 == a[i] or last_2 == a[i]) {
cout << 0;
exit(0);
}
return dfs(i+1, false, false, last_2, a[i]);
}
int res = 0;
for(char j=a[i]+1; j<b[i]; j++){
if(j == last_1 or j == last_2) continue;
res += dfs(i+1, true, true, last_2, j);
}
if(last_2 != a[i] and last_1 != a[i]) res += dfs(i+1, false, true, last_2, a[i]);
if(last_2 != b[i] and last_1 != b[i]) res += dfs(i+1, true, false, last_2, b[i]);
return res;
}
void solve(){
int x, y; cin >> x >> y;
int ans = 0;
for(int i=x; i<=y; i++){
string k = to_string(i);
bool is = true;
for(int j=1; j<k.size(); j++){
if(k[j] == k[j-1]) is = false;
if(j>1 and k[j] == k[j-2]) is = false;
}
if(is) ans++;
}
a = to_string(x);
b = to_string(y);
while(a.size() < b.size()) a = '0' + a;
if(ans != dfs(0, false, false, '%', '&')) TLE();
cout << dfs(0, false, false, '%', '&');
}
signed main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
solve();
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |