赛时靠数位 dp 过的……
因为这个做法吃了两发罚时
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int , int> pi;
#define endl '\n'
#define int long long
const int N = 2e5 + 10;
int n;
ll l , r;
ll getx(ll x) {
if (x < 10) return x + 1;
ll res = 0;
// cout << x << endl;
int p = 0;
for (ll w = 1; w <= x && p <= 18; w *= 10) {
for (int i = 1; i <= 9; i++) {
if (i * w > x) continue;
if ((i + 1) * w > x) {
ll lst = x - i * w, tot = 0;
vector<int> num;
while (lst) num.push_back(lst % 10), lst /= 10;
reverse(num.begin(), num.end());
tot = num.size() - 1;
for (auto u : num) {
// cout << u << ' ' << res << endl;
if (u < i) {
for (int v = 0; v < u + (tot == 0); v ++) res += pow(i, tot);
} else {
for (int v = 0; v < i; v ++) res += pow(i, tot);
break;
}
tot --;
}
} else {
res += pow(i , p);
}
// cout << i << ' ' << res << endl;
}
p++;
}
return res;
}
signed main() {
ios::sync_with_stdio(0) , cin.tie(0) , cout.tie(0);
cin >> l >> r;
cout << getx(r) - getx(l - 1) << endl;
return 0;
}