没必要swap,数据保证a > b不成立;
而且这边定义是longlong,所以printf要用%lld
```然后, 改了就AC```
[AC记录](https://www.luogu.com.cn/record/86962148)
by StkOvflow @ 2022-09-19 13:26:38
@[adolf_stalin](/user/698768)
```
#include <iostream>
#include <vector>
#define int long long
using namespace std;
int base[20];
int f[20][20];
int g[20][20];
void init() {
base[0] = 1;
for(int i = 1 ; i <= 18 ; i++) base[i] = base[i-1]*10;
for(int i = 0 ; i <= 9 ; i++) f[1][i] = 1;
for(int i = 2 ; i <= 18 ; i++)
for(int j = 0 ; j <= 9 ; j++)
f[i][j] = f[i-1][j]*10 + base[i-1];
for(int i = 1 ; i <= 9 ; i++) g[1][i] = 1;
for(int i = 2 ; i <= 18 ; i++) {
g[i][0] = g[i-1][0] + f[i-1][0]*9;
for(int j = 1 ; j <= 9 ; j++)
g[i][j] = g[i-1][j] + f[i-1][j]*9 + base[i-1];
}
}
vector<int> dp(int n) {
vector<int> ans(10,0);
if(n<=0) return ans;
vector<int> nums;
while(n) nums.push_back(n%10), n/=10;
vector<int> last(10,0);
for(int i = 0 ; i <= 9 ; i++) ans[i] = g[nums.size()-1][i];
for(int i = nums.size()-1 ; i >=0 ; i--) {
int x = nums[i];
for(int j = i==nums.size()-1 ; j < x ; j++) {
for(int k = 0 ; k <= 9 ; k++)
ans[k] += last[k] * base[i];
ans[j] += base[i];
for(int k = 0 ; k <= 9 ; k++)
ans[k] += f[i][k];
}
last[x] ++;
if(!i) for(int k = 0 ; k <= 9 ; k++) ans[k] += last[k];
}
return ans;
}
vector<int> ask(unsigned int a, unsigned int b) {
auto x = dp(b);
auto y = dp(a-1);
vector<int> ans;
for(int i = 0 ; i <= 9 ; i++) ans.push_back(x[i]-y[i]);
return ans;
}
void print(vector<int> ans) {
for(auto x:ans) printf("%lld ",x);
printf(" ") ;
}
signed main() {
init();
int a,b;
cin >> a >> b ;
auto t = ask(a,b);
print(t);
return 0;
}
```
by StkOvflow @ 2022-09-19 13:27:19
@[yczmCO2](/user/576242) 太巨辣!谢谢神犇%%%
by adolf_stalin @ 2022-09-20 08:51:53
@[StkOvflow](/user/576242)
感谢。没开long long错了7个测试点。
by sjyh_jy @ 2024-01-11 16:03:36