rt.
思路数位 dp
#include <bits/stdc++.h>
#define int unsigned long long
using namespace std;
const int N = 1e5 + 100;
int L, R, a[N], f[200][200],
cnt;
int dfs(int x, int sum, bool vis, int d) {
if (!x) {
return sum;
}
if (!vis && f[x][sum]) {
return f[x][sum];
}
int r = vis ? a[x] : 9, ans = 0;
for (int i = 0; i <= r; i++) {
ans = (ans + dfs(x - 1, sum + (i == d), vis && i == r ? 1 : 0, d));
}
if (!vis) {
f[x][sum] = ans;
}
return ans;
}
int solve(int n, int x) {
cnt = 0;
memset(a, 0, sizeof(a));
while (n) {
a[++cnt] = n % 10;
n /= 10;
}
return dfs(cnt, 0, 1, x);
}
signed main() {
cin >> L >> R;
for (int i = 0; i <= 9; i++) {
cout << solve(R, i) - solve(L - 1, i) << ' ';
}
return 0;
}