#include <bits/stdc++.h>
#pragma GCC optimize ("O3")
#pragma GCC target ("sse4")
using namespace std;
#define int long long int
const int N = 3e5 + 10;
const int md = 1e9 + 7;
const int INF = 1e9;
int dp[20][11][11][2][2];
int solve(string &num, int n, int pr1, int pr2, bool st, int tight) {
if (n == 0) {
// cout << '\n';
return 1;
}
auto &el = dp[n][pr1][pr2][st][tight];
if (~el) {
// cout << '\n';
return el;
}
int ub = (tight ? (num[(int) num.size() - n] - '0') : 9);
int ans = 0;
for (int dig = 0; dig <= ub; dig++) {
if (dig != pr1 && dig != pr2) {
// cout << dig;
ans += solve(num, n - 1, ((st || dig > 0) ? dig : 10), pr1, (st | (dig > 0)) ,(tight & (dig == ub)));
}
}
return el = ans;
}
int32_t main(int32_t argc, char *argv[]) {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int T = 1;
// cin >> T;
while (T--) {
string l, r;
cin >> l >> r;
memset(dp, -1, sizeof(dp));
int ansr = solve(r, (int) r.size(), 10, 10, 0, 1);
memset(dp, -1, sizeof(dp));
int ansl = solve(l, (int) l.size(), 10, 10, 0, 1);
bool ok = 1;
for (int i = 1; i < (int) l.size(); i++) {
if (l[i] == l[i - 1] || (i > 1 && l[i - 2] == l[i])) {
ok = 0;
break;
}
}
cout << ansr - ansl + ok << '\n';
}
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |