Description
给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次。
Input
输入文件中仅包含一行两个整数a、b,含义如上所述。
Output
输出文件中包含一行10个整数,分别表示0-9在[a,b]中出现了多少次。
Sample Input
1 99
Sample Output
9 20 20 20 20 20 20 20 20 20
HINT
30%的数据中,a<=b<=10^6;
100%的数据中,a<=b<=10^12。Source
题解
一道裸的数位dp
dp[i][j][k]表示长度为i开头为j的数字中k的个数
就当模板啦
1 #include2 #define ll long long 3 using namespace std; 4 struct node{ ll a[10]; }; 5 ll a,b; 6 ll t[15]; 7 node dp[15][10]; 8 node operator + (node x,node y){ 9 node t;10 for (int k=0;k<=9;k++)11 t.a[k]=x.a[k]+y.a[k];12 return t;13 }14 node calc(ll x){15 node ans;16 for (int i=0;i<=9;i++) ans.a[i]=0;17 if (!x){18 ans.a[0]=1;19 return ans; 20 }21 int len=12;22 while (t[len]>x) len--;23 ans.a[0]++;24 for (int i=1;i =1;i--){33 cnt=x/t[i];34 for (int j=0;j