博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ-1833-[ZJOI2010]count 数字计数(数位dp)
阅读量:6537 次
发布时间:2019-06-24

本文共 954 字,大约阅读时间需要 3 分钟。

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 #include
2 #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
View Code

 

转载于:https://www.cnblogs.com/zhuchenrui/p/7743417.html

你可能感兴趣的文章