[BZOJ1833][ZJOI2010]count 数字计数

试题描述

给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次。

输入

输入文件中仅包含一行两个整数a、b,含义如上所述。

输出

输出文件中包含一行10个整数,分别表示0-9在[a,b]中出现了多少次。

输入示例

输出示例

数据规模及约定

30%的数据中,a<=b<=10^6;
100%的数据中,a<=b<=10^12。

题解

数位 dp,许多恶心的边界条件需要考虑。

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstdlib>
  4. #include <cstring>
  5. #include <cctype>
  6. #include <algorithm>
  7. using namespace std;
  8. #define LL long long
  9.  
  10. LL read() {
  11. LL x = 0, f = 1; char c = getchar();
  12. while(!isdigit(c)){ if(c == '-') f = -1; c = getchar(); }
  13. while(isdigit(c)){ x = x * 10 + c - '0'; c = getchar(); }
  14. return x * f;
  15. }
  16.  
  17. #define maxn 20
  18. LL f[maxn][maxn][maxn], ans[maxn], ten[maxn];
  19.  
  20. void sum(LL x, int fl) {
  21. if(x < 0) return ;
  22. if(!x) ans[0] += fl;
  23. LL tot[maxn], tx = x;
  24. memset(tot, 0, sizeof(tot));
  25. int num[maxn], cnt = 0;
  26. while(x) num[++cnt] = x % 10, x /= 10;
  27. for(int k = 0; k <= 9; k++)
  28. for(int i = 1; i < cnt; i++)
  29. for(int j = (i == 1 ? 0 : 1); j <= 9; j++) tot[k] += f[k][i][j];
  30. // for(int i = 0; i <= 9; i++) printf("%lld%c", tot[i], i < 9 ? ' ' : '\n');
  31. for(int i = cnt; i; i--) {
  32. LL sum = 0;
  33. for(int k = 0; k <= 9; k++)
  34. for(int j = (i == cnt && i > 1 ? 1 : 0); j < num[i]; j++) tot[k] += f[k][i][j];
  35. tot[num[i]] += tx % ten[i-1] + 1;
  36. }
  37. // for(int i = 0; i <= 9; i++) printf("%lld%c", tot[i], i < 9 ? ' ' : '\n');
  38. for(int i = 0; i <= 9; i++) ans[i] += tot[i] * fl;
  39. return ;
  40. }
  41.  
  42. int main() {
  43. ten[0] = 1;
  44. for(int i = 1; i < 13; i++) ten[i] = ten[i-1] * 10;
  45. for(int k = 0; k <= 9; k++) f[k][1][k] = 1;
  46. for(int k = 0; k <= 9; k++)
  47. for(int i = 1; i <= 13; i++)
  48. for(int j = 0; j <= 9; j++) {
  49. // if(k == 1) printf("%d %d %d: %lld\n", k, i, j, f[k][i][j]);
  50. for(int x = 0; x <= 9; x++)
  51. f[k][i+1][x] += f[k][i][j] + (x == k) * ten[i-1];
  52. }
  53.  
  54. LL a = read(), b = read();
  55. sum(b, 1); sum(a - 1, -1);
  56. for(int i = 0; i <= 9; i++) printf("%lld%c", ans[i], i < 9 ? ' ' : '\n');
  57.  
  58. return 0;
  59. }

做的时候最好用暴力对拍一下。。。

[BZOJ1833][ZJOI2010]count 数字计数的更多相关文章

  1. BZOJ1833 ZJOI2010 count 数字计数 【数位DP】

    BZOJ1833 ZJOI2010 count 数字计数 Description 给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次. Input 输入文件中仅包 ...

  2. bzoj1833: [ZJOI2010]count 数字计数(数位DP+记忆化搜索)

    1833: [ZJOI2010]count 数字计数 题目:传送门 题解: 今天是躲不开各种恶心DP了??? %爆靖大佬啊!!! 据说是数位DP裸题...emmm学吧学吧 感觉记忆化搜索特别强: 定义 ...

  3. [BZOJ1833][ZJOI2010]Count数字计数(DP)

    数位DP学傻了,怎么写最后都写不下去了. 这题严格上来说应该不属于数位DP?只是普通DP加上一些统计上的判断吧. 首先复杂度只与数的位数$\omega$有关,所以怎么挥霍都不会超. f[i][j][k ...

  4. bzoj1833: [ZJOI2010]count 数字计数 数位dp

    bzoj1833 Description 给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次. Input 输入文件中仅包含一行两个整数a.b,含义如上所述. O ...

  5. bzoj1833: [ZJOI2010]count 数字计数 && codevs1359 数字计数

    bzoj1833 codevs1359 这道题也是道数位dp 因为0有前导0这一说卡了很久 最后发现用所有位数减1~9的位数就okay.....orzczl大爷 其他就跟51nod那道统计1出现次数一 ...

  6. [bzoj1833][ZJOI2010]count 数字计数——数位dp

    题目: (传送门)[http://www.lydsy.com/JudgeOnline/problem.php?id=1833] 题解: 第一次接触数位dp,真的是恶心. 首先翻阅了很多很多一维dp,因 ...

  7. BZOJ1833 [ZJOI2010]count 数字计数 【数学 Or 数位dp】

    题目 给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次. 输入格式 输入文件中仅包含一行两个整数a.b,含义如上所述. 输出格式 输出文件中包含一行10个整数, ...

  8. bzoj1833: [ZJOI2010]count 数字计数&&USACO37 Cow Queueing 数数的梦(数位DP)

    难受啊,怎么又遇到我不会的题了(捂脸) 如题,这是一道数位DP,随便找了个博客居然就是我们大YZ的……果然nb,然后就是改改模版++注释就好的了,直接看注释吧,就是用1~B - 1~A-1而已,枚举全 ...

  9. 【数位dp】bzoj1833: [ZJOI2010]count 数字计数

    数位dp姿势一直很差啊:顺便庆祝一下1A Description 给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次. Input 输入文件中仅包含一行两个整数a ...

随机推荐

  1. jquery控制滚动条改变上面固定(fixed)导航条或者搜索框的属性

    <script type="text/javascript"> $(document).ready(function(){ $(window).scroll( func ...

  2. JavaWeb学习笔记——SAX解析

    import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHa ...

  3. 解决问题--VS2012中一个Panel覆盖另一个Panel时拖动时容易造成两个控件成父子关系的避免

    在*.Designer.cs中,假如想把panel1覆盖到panel2上,但是VS自动让panel1成为panel2的子控件了,在文件中会有this.panel2.Controls.Add(this. ...

  4. nginx重定向配置

    # /etc/nginx/nginx.conf #写在server,location核心模块中,if也可以写.$http_host客户端设法要到达主机的主机名 if ($http_host !~ “^ ...

  5. linux sort,uniq,cut,wc,tr命令详解

    sort是在Linux里非常常用的一个命令,对指定文件进行排序.去除重复的行 sort 命令对 File 参数指定的文件中的行排序,并将结果写到标准输出.如果 File 参数指定多个文件,那么 sor ...

  6. xss漏洞挖掘小结

    xss漏洞挖掘小结 最近,在挖掘xss的漏洞,感觉xss真的不是想象的那样简单,难怪会成为一类漏洞,我们从防的角度来讲讲xss漏洞的挖掘方法: 1.过滤 一般服务器端都是采用这种方式来防御xss攻击, ...

  7. Simple colum formatting in Yii 2 GridView

    A very important widget in the business apps development is the GridView control. In this post I wil ...

  8. 关于hibernate纯sql查询返回结果集的问题(hbm.xml中不写多表关联)

    相信用过hibernate的兄弟们都会因为多表复杂查询后,为返回的结果如何组装到一个VO中而烦恼不已.我也不停的为此而烦恼,但是在看了hibernate的transform后,感觉这个方法还挺管用的. ...

  9. Java7的异常处理新特性-addSuppressed()方法等

    开发人员对异常处理的try-catch-finally语句块都比较熟悉.如果在try语句块中抛出了异常,在控制权转移到调用栈上一层代码之前,finally语句块中的语句也会执行.但是finally语句 ...

  10. Java Runtime.availableProcessors()方法

    Java Runtime.availableProcessors()方法用法实例教程.   描述 java.lang.Runtime.availableProcessors() 方法返回到Java虚拟 ...