Description

杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer)。

杭州交通管理局常常会扩充一些的士车牌照。新近出来一个好消息。以后上牌照,不再含有不吉利的数字了。这样一来。就能够消除个别的士司机和乘客的心理障碍。更安全地服务大众。

不吉利的数字为全部含有4或62的号码。

比如:

62315 73418 88914

都属于不吉利号码。

可是。61152尽管含有6和2,但不是62连号,所以不属于不吉利数字之列。

你的任务是,对于每次给出的一个牌照区间号。判断出交管局今次又要实际上给多少辆新的士车上牌照了。

 

Input

输入的都是整数对n、m(0<n≤m<1000000),假设遇到都是0的整数对。则输入结束。
 

Output

对于每一个整数对,输出一个不含有不吉利数字的统计个数。该数值占一行位置。
 

Sample Input

  1. 1 100
  2. 0 0
 

Sample Output

  1. 80

思路:打表 ,数据量不大

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <algorithm>
  5. using namespace std;
  6. const int maxn = 1000000;
  7.  
  8. int n, m;
  9. int f[maxn+5];
  10.  
  11. int check(int num) {
  12. while (num) {
  13. if (num % 10 == 4)
  14. return 0;
  15. if (num % 100 == 62)
  16. return 0;
  17. num /= 10;
  18. }
  19. return 1;
  20. }
  21.  
  22. int cal(int num) {
  23. int ans = 0;
  24. for (int i = 1; i <= num; i++)
  25. if (check(i))
  26. f[i] = f[i-1] + 1;
  27. else f[i] = f[i-1];
  28. return ans;
  29. }
  30.  
  31. int main() {
  32. memset(f, 0, sizeof(f));
  33. cal(maxn);
  34. while (scanf("%d%d", &n, &m) != EOF && n+m) {
  35. printf("%d\n", f[m]-f[n-1]);
  36. }
  37. return 0;
  38. }

思路:数位DP,属于比較基础的一道,注意最后的flag的推断。这个是为了将数字本身算进去

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <algorithm>
  5. #include <queue>
  6. using namespace std;
  7. const int maxn = 1000;
  8.  
  9. /*
  10. * dp[i][0],表示长度为i。不存在不吉利数字
  11. * dp[i][1],表示长度为i,不存在不吉利数字。且最高位为2
  12. * dp[i][2],表示长度为i,存在不吉利数字
  13. */
  14.  
  15. int n, m;
  16. int dp[maxn][3];
  17.  
  18. void init() {
  19. memset(dp, 0, sizeof(dp));
  20. dp[0][0] = 1;
  21. dp[0][1] = dp[0][2] = 0;
  22. for (int i = 1; i < maxn; i++) {
  23. dp[i][0] = dp[i-1][0]*9 - dp[i-1][1];
  24. dp[i][1] = dp[i-1][0];
  25. dp[i][2] = dp[i-1][2]*10 + dp[i-1][1] + dp[i-1][0];
  26. }
  27. }
  28.  
  29. int cal(int num) {
  30. int len = 0;
  31. int tmp = num;
  32. int bit[maxn];
  33. while (num) {
  34. bit[++len] = num%10;
  35. num /= 10;
  36. }
  37. bit[len+1] = 0;
  38. int ans = 0;
  39. int flag = 0;
  40. for (int i = len; i >= 1; i--) {
  41. ans += dp[i-1][2]*bit[i];
  42. if (flag)
  43. ans += dp[i-1][0]*bit[i];
  44. if (!flag && bit[i] > 4)
  45. ans += dp[i-1][0];
  46. if (!flag && bit[i+1] == 6 && bit[i] > 2)
  47. ans += dp[i][1];
  48. if (!flag && bit[i] > 6)
  49. ans += dp[i-1][1];
  50. if (bit[i] == 4 || (bit[i+1] == 6 && bit[i] == 2))
  51. flag = 1;
  52. }
  53. if (flag)
  54. ans++;
  55. return tmp - ans;
  56. }
  57.  
  58. int main() {
  59. init();
  60. while (scanf("%d%d", &n, &m) != EOF && n+m) {
  61. printf("%d\n", cal(m)-cal(n-1));
  62. }
  63. return 0;
  64. }

HDU - 2089 不要62 (暴力或数位DP)的更多相关文章

  1. hdu 2089 不要62(入门数位dp)

    不要62 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  2. hdu 2089 不要62(初学数位DP)

    http://acm.hdu.edu.cn/showproblem.php?pid=2089 题意: 给定 m,.n; 求车牌号 m~n之间 有多少数字 不含 4或62     ,8652是可以的 . ...

  3. HDU 2089 不要62 | 暴力(其实是个DP)

    题目: http://acm.hdu.edu.cn/showproblem.php?pid=2089 题解: 暴力水过 #include<cstdio> #include<algor ...

  4. Hdu 2089 不要62 (数位dp入门题目)

    题目链接: Hdu 2089 不要62 题目描述: 给一个区间 [L, R] ,问区间内不含有4和62的数字有多少个? 解题思路: 以前也做过这个题目,但是空间复杂度是n.如果数据范围太大就GG了.今 ...

  5. HDU 2089 不要62 (递推+暴力或者数位DP)

    题意:中文题. 析:暴力先从1到1000000,然后输出就好了. 代码如下: #include <iostream> #include <cstdio> #include &l ...

  6. HDU 2089 - 不要62 - [数位DP][入门题]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2089 Time Limit: 1000/1000 MS (Java/Others) Memory Li ...

  7. HDU 2089 不要62(数位dp模板题)

    http://acm.hdu.edu.cn/showproblem.php?pid=2089 题意:求区间内不包含4和连续62的数的个数. 思路: 简单的数位dp模板题.给大家推荐一个好的讲解博客.h ...

  8. HDU 2089(暴力和数位dp)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=2089 不要62 Time Limit: 1000/1000 MS (Java/Others)    M ...

  9. [hdu 2089] 不要62 数位dp|dfs 入门

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2089 题意:求[n, m]区间内不含4和62的数字个数. 这题有两种思路,直接数位dp和dfs 数位d ...

随机推荐

  1. Django---分页器、中间件

    分页 Django的分页器(paginator) view   from django.shortcuts import render,HttpResponse # Create your views ...

  2. 如何在Windows环境搭建Object C开发环境

    1. 安装编译环境 Object C和其他很多语言一样,都需要有一个编译器.Object C 是在GCC下编译的.GCC(GNU Compiler Collection,GNU编译器集合),是一套由 ...

  3. vue使用sweetalert2弹窗插件

    1). 安装 sweetalert2 npm install sweetalert2@7.15.1 --save 2). 封装 sweetalert2 在 src 新建 plugins 文件夹,然后新 ...

  4. selinux开关

    状态查看 /usr/sbin/sestatus -v 临时打开 setenforce 1 #设置SELinux 成为enforcing模式 临时关闭 setenforce 0 #设置SELinux 成 ...

  5. 支持移动触摸设备的简洁js幻灯片插件

    lory是一款支持移动触摸设备的简洁的js幻灯片插件.该幻灯片插件可以通过纯js调用,也可以将该幻灯片插件作为jQuery插件来使用.该幻灯片的过渡动画具有硬件加速功能,并且可以定制是否使用easin ...

  6. 一款基于jquery和css3实现的摩天轮式分享按钮

    之前分享了很多css3实现的按钮.今天要给大家带来一款基于jquery和css3实现的摩天轮式分享按钮.这款分享按钮页面底部有一个toggle按钮,单击该按钮,摩天轮按钮以动画的形式出现,各个分享按钮 ...

  7. c#写一个网站后台扫描器

    主要分成了那么几个步骤: 1.HTTP状态码 2.字典的导入 3.显示在listview控件当中 第一步: 先来实现HTTP状态码200的判断 try { req = (HttpWebRequest) ...

  8. 【WPF】TabControl垂直分页栏/选项卡

    分页栏控件TabControl默认的选项卡是水平方向的,如下: 现在要改成垂直方向的: 给TabControl 标签添加属性 TabStripPlacement=”Left” , 如下: <Ta ...

  9. kernel 3.2.0 上加入自己的板级文件

    第一步.复制自己的参考的板级文件 cp arch/arm/mach-omap2/board-am335xevm.c arch/arm/mach-omap2/board-aplex_ECM_5412.c ...

  10. 设计模式-观察者模式(下)<转>

    观察者模式在Java中有两种实现方式,上文是一种方式,这种方式是自己写代码实现. 另一种方式是使用Java内置的观察者模式来实现.   相关的接口和类如下: java.util.Observable  ...