#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
using namespace std;
using namespace __gnu_pbds;
#define endl "\n"
#define ll long long
#define IOS ios_base::sync_with_stdio(false); cin.tie(nullptr);
long long dp[20][11][11][3];
long long calc(long long n) {
if (n == -1) {
return 0;
}
if (n == 0) {
return 1;
}
vector<int> b;
while (n > 0) {
b.push_back(n % 10);
n /= 10;
}
reverse(b.begin(), b.end());
for (int d = 1; d < 10; d++) {
if (d < b[0]) {
dp[0][10][d][0] = 1;
} else if (d == b[0]) {
dp[0][10][d][2] = 1;
} else {
dp[0][10][d][1] = 1;
}
}
for (int i = 1; i < b.size(); i++) {
for (int j = 0; j <= 10; j++) {
for (int k = 0; k <= 10; k++) {
for (int d = 0; d < 10; d++) {
if (j == k || j == d || k == d) {
continue;
}
if (d < b[i]) {
dp[i][k][d][0] += dp[i - 1][j][k][0] + dp[i - 1][j][k][2];
dp[i][k][d][1] += dp[i - 1][j][k][1];
} else if (d == b[i]) {
dp[i][k][d][0] += dp[i - 1][j][k][0];
dp[i][k][d][1] += dp[i - 1][j][k][1];
dp[i][k][d][2] += dp[i - 1][j][k][2];
} else {
dp[i][k][d][1] += dp[i - 1][j][k][1] + dp[i - 1][j][k][2];
dp[i][k][d][0] += dp[i - 1][j][k][0];
}
}
}
}
}
long long ans = 0;
for (int i = 0; i < b.size(); i++) {
for (int j = 0; j <= 10; j++) {
for (int k = 0; k <= 10; k++) {
if (i < b.size() - 1) {
ans += dp[i][j][k][0] + dp[i][j][k][1] + dp[i][j][k][2];
} else {
ans += dp[i][j][k][0] + dp[i][j][k][2];
}
dp[i][j][k][0] = 0, dp[i][j][k][1] = 0, dp[i][j][k][2] = 0;
}
}
}
return ans + 1;
}
int main() {
IOS;
long long l, r;
cin >> l >> r;
cout << calc(r) - calc(l - 1);
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |