1026: [SCOI2009]windy数

Time Limit: 1 Sec  Memory Limit: 162 MB
Submit: 7982  Solved: 3593

Description

  windy定义了一种windy数。不含前导零且相邻两个数字之差至少为2的正整数被称为windy数。 windy想知道,
在A和B之间,包括A和B,总共有多少个windy数?

Input

  包含两个整数,A B。

Output

  一个整数

Sample Input

【输入样例一】
1 10
【输入样例二】
25 50

Sample Output

【输出样例一】
9
【输出样例二】
20

HINT

【数据规模和约定】

100%的数据,满足 1 <= A <= B <= 2000000000 。

code

 1 #include<cstdio>
 2 #include<algorithm>
 3 #include<cmath>
 4
 5 using namespace std;
 6 int f[15][15],a[15];
 7
 8 void init()
 9 {
10     for (int i=0; i<=9; ++i)
11         f[1][i] = 1;
12     for (int i=2; i<=10; ++i)
13         for (int j=0; j<=9; ++j)
14             for (int k=0; k<=9; ++k)
15                 if (abs(j-k)>=2) f[i][j] += f[i-1][k];//相邻两位数满足>=2
16 }
17 int calc(int x)//计算小于等于x的windy数的个数
18 {
19     if (!x) return 0;
20     int tot = 0,ret = 0;
21     while (x)
22     {
23         a[++tot] = x%10;
24         x /= 10;
25     }
26     for (int i=tot; i; --i)//枚举位数
27     {
28         if (tot-i>=2&&abs(a[i+1]-a[i+2])<=1) break;//不满足相邻两位数>=2的条件
29         for (int j=0+(i==tot); j<a[i]+(i==1); ++j)
30             if (i==tot||abs(j-a[i+1])>=2) ret += f[i][j];
31     }
32     for (int i=tot-1; i; --i)
33         for (int j=1; j<=9; ++j)
34             ret += f[i][j];
35     return ret;
36 }
37 int main()
38 {
39     int n,m;
40     init();
41     while (scanf("%d%d",&n,&m)!=EOF)
42     {
43         printf("%d\n",calc(m)-calc(n-1));
44     }
45     return 0;
46 }

转载于:https://www.cnblogs.com/mjtcn/p/7367594.html

bzoj:1026: [SCOI2009]windy数(数位dp)相关推荐

  1. bzoj 1026: [SCOI2009]windy数 数位DP算法笔记

    数位DP入门题之一 也是我所做的第一道数位DP题目 (其实很久以前就遇到过 感觉实现太难没写) 数位DP题目貌似多半是问从L到R内有多少个数满足某些限制条件 只要出题人不刻意去卡多一个$log$什么的 ...

  2. 洛谷 P2657 [SCOI2009] windy数 数位DP

    大家觉得写还可以,可以点赞.收藏.关注一下吧! 也可以到我的个人博客参观一下,估计近几年都会一直更新!和我做个朋友吧!https://motongxue.cn 文章目录 P2657 [SCOI2009 ...

  3. bzoj 1026: [SCOI2009]windy数(数位dp)

    1026: [SCOI2009]windy数 Time Limit: 1 Sec  Memory Limit: 162 MB Submit: 7688  Solved: 3470 [Submit][S ...

  4. BZOJ 1026 [SCOI2009]windy数

    1026: [SCOI2009]windy数 Description windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道,在A和B之间 ...

  5. 【bzoj1026】[SCOI2009]windy数 数位dp

    题目描述 windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道,在A和B之间,包括A和B,总共有多少个windy数? 输入 包含两个整数 ...

  6. BZOJ1026 [SCOI2009]windy数 数位dp

    欢迎访问~原文出处--博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1026 题目概括 求区间[A,B]中有多少数满足下面的条件. 条件:该数相邻两位之差不小于2. 题解 ...

  7. 题解 BZOJ1026 luogu P2657 [SCOI2009]windy数 数位DP

    BZOJ & luogu 看到某大佬AC,本蒟蒻也决定学习一下玄学的数位$dp$ (以上是今年3月写的话(叫我鸽神$qwq$)) 思路:数位$DP$ 提交:2次 题解:(见代码) #inclu ...

  8. bzoj 1026: [SCOI2009]windy数

    Time Limit: 1 Sec Memory Limit: 162 MB Submit: 9998 Solved: 4629 [Submit][Status][Discuss] Descripti ...

  9. P2657 [SCOI2009]windy数(数位dp)

    题目描述 windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道, 在A和B之间,包括A和B,总共有多少个windy数? 输入输出格式 输 ...

最新文章

  1. linux slocate(secure locate) 命令详解
  2. 为内置对象添加原型方法 把局部变量编程全局变量
  3. 程序猿爆笑选集(1)
  4. mkdir 创建目录
  5. java怎么根据编号修改数据类型_Java中怎么根据不同的输入数据类型调用不同的方法呢?...
  6. Hadoop中各组件的作用
  7. UCRT: VC 2015 Universal CRT, by Microsoft
  8. 电子海图中的自动化关键技术研究
  9. 服务器修改动态磁盘,如何创建动态磁盘
  10. 深度解析 | 炎症,肠道菌群以及抗炎饮食
  11. 如何在电脑端同时登录多个企业微信或微信
  12. ComboBox 智能过滤,模糊匹配,拼音首字母匹配
  13. su如何变成实体_Sketchup实体工具怎么使用? SU实体工具的使用方法
  14. 两个tplink路由器有线桥接_TP-Link路由器有线方式桥接设置教程
  15. 百度笔记聚合是什么?
  16. 2013中国企业500强榜单出炉
  17. python 处理异常
  18. 手机DCIM\.thumbnails 文件删除
  19. snowflake做主键 自增_忘掉 Snowflake,感受一下性能高出 587 倍的全局唯一 ID 生成算法...
  20. 关于md编辑器就MYSQL保存文件解决方案

热门文章

  1. int** 赋值_关于Java语言复合赋值运算符的两个问题,快来瞧瞧
  2. svn异地同步 linux,svn库两地开发之代码数据的同步包括***连接的全套解决方案
  3. php怎么引入外部css文件,js如何引入css外部文件
  4. C++笔记-const与mutable、static_cast与reinterpret_cast
  5. C++ opengl 绘制地面
  6. 认识死锁之死锁的基本概念
  7. Qt工作笔记-树图结构的2种方式,实现右键菜单
  8. 反汇编基础-数据类型以及C++引用、指针反汇编后的概括
  9. 用t430搭建虚拟服务器教程,T430完美使用VmWare
  10. python截取字符串函数substr_PHP substr():截取字符串