首页 > 其他 > 详细

P2602 [ZJOI2010]数字计数

时间:2018-10-31 14:18:35      阅读:116      评论:0      收藏:0      [点我收藏+]

 

https://www.luogu.org/problemnew/show/P2602

数位dp

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 #define ll long long
 4 const double minv=1e-10;
 5 
 6 ll g[10],shi[15];
 7 
 8 void cal(ll a,ll c,int ori)
 9 {
10     int i,w,s;
11     w=(log(a+minv)/log(10));
12     i=w;
13     while (i>=0)
14         g[0]-=shi[i--]*c;
15     while (w>=0)
16     {
17         s=a/shi[w];
18         if (w!=0)
19             for (i=0;i<10;i++)
20                 g[i]+=s*shi[w-1]*w*c;
21         for (i=0;i<s;i++)
22             g[i]+=shi[w]*c;
23         g[s]+=(a%shi[w]+1)*c;
24         a=a%shi[w];
25         w--;
26     }
27 }
28 
29 int main()
30 {
31     ll a,b;
32     int i;
33     scanf("%lld%lld",&a,&b);
34     shi[0]=1;
35     for (i=1;i<=12;i++)
36         shi[i]=shi[i-1]*10;
37     cal(b,1,0);
38     cal(a-1,-1,0);
39     for (i=0;i<10;i++)
40     {
41         printf("%lld",g[i]);
42         if (i!=10)
43             printf(" ");
44     }
45     return 0;
46 }
47 /*
48 1 999
49 5 10
50 10 20
51 10 19
52 1 1000000000000
53 99 1000000000000
54 */
55 /*
56 13 99
57 8 15 18 19 19 19 19 19 19 19
58 13 550
59 104 210 213 214 214 156 104 104 104 104
60 2 110
61 21 32 21 21 21 21 21 21 21 21
62 1 100000000
63 68888897 80000001 80000000 80000000 80000000 80000000 80000000 80000000 80000000 80000000
64 */

 

P2602 [ZJOI2010]数字计数

原文:https://www.cnblogs.com/cmyg/p/9882743.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!