Files
luogu/P2602.cpp
T
2026-08-26 20:35:51 +08:00

48 lines
1.0 KiB
C++

#include <bits/stdc++.h>
using namespace std;
#define int long long
int dig[20], len;
int dp[20][20][2][2]; // pos, cnt, limm, fl
int dfs(int pos, int cnt, bool limm, bool fl, int too)
{
if (pos == len)
return cnt;
if (dp[pos][cnt][limm][fl] != -1)
return dp[pos][cnt][limm][fl];
int up = limm ? dig[pos] : 9;
int res = 0;
for (int d = 0; d <= up; ++d)
{
bool nl = fl && (d == 0);
int add = 0;
if (!(fl && d == 0) && d == too)
add = 1;
res += dfs(pos + 1, cnt + add, limm && (d == up), nl, too);
}
return dp[pos][cnt][limm][fl] = res;
}
int doo(int n, int too)
{
if (n <= 0)
return 0;
len = 0;
while (n)
{
dig[len++] = n % 10;
n /= 10;
}
reverse(dig, dig + len);
memset(dp, -1, sizeof(dp));
return dfs(0, 0, true, true, too);
}
signed main()
{
int a, b;
cin >> a >> b;
for (int i = 0; i <= 9; ++i)
{
cout << doo(b, i) - doo(a - 1, i) << ' ';
}
return 0;
}