【BZOJ1026】【SCOI2009】windy数
Description
windy定义了一种windy数。不含前导零且相邻两个数字之差至少为2的正整数被称为windy数。 windy想知道,在A和B之间,包括A和B,总共有多少个windy数?
Input
包含两个整数,A B。
Output
一个整数。
Sample Input1
1 10
Sample Output1
9
Sample Input2
25 50
Sample Output2
20
Hint
100%的数据,满足$ 1\leq A \leq B \leq 2*10^{9}$ 。
Solution
数位DP,用\(f_{i,j}\)表示i位数,最高位为j的情况,容易得出DP方程为\(f_{i,j}=\Sigma_{k} f_{i-1,k} (|k-j| \leq 2)\).
Code
#include <stdio.h>
#define MN 15
#define R register
int a,b,f[MN][MN],q[MN];
void init(){
for (R int i=0; i<10; ++i) f[1][i]=1;
for (R int i=2; i<11; ++i)
for (R int j=0; j<10; ++j)
for (R int k=0; k<10; ++k)
if (j-k>1||k-j>1)
f[i][j]+=f[i-1][k];
}
int get(int x){
if (!x) return 0;R int res=0,k=0;
while(x){q[++k]=x%10;x/=10;}
for (R int i=1; i<k; ++i)
for (R int j=1; j<10; ++j)
res+=f[i][j];
for (R int i=1; i<q[k]; ++i)
res+=f[k][i];
for (R int i=k-1; i; --i){
for (R int j=0; j<q[i]; ++j)
if (j-q[i+1]>1||q[i+1]-j>1)
res+=f[i][j];
if (q[i+1]-q[i]>1||q[i]-q[i+1]>1){
if (i==1) ++res;
continue;
}break;
}return res;
}
int main(){
init();scanf("%d %d",&a,&b);
printf("%d",get(b)-get(a-1));
return 0;
}
【BZOJ1026】【SCOI2009】windy数的更多相关文章
- BZOJ1026 SCOI2009 windy数 【数位DP】
BZOJ1026 SCOI2009 windy数 Description windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道,在A和B ...
- BZOJ1026: [SCOI2009]windy数[数位DP]
1026: [SCOI2009]windy数 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 6346 Solved: 2831[Submit][Sta ...
- 【数位DP】bzoj1026: [SCOI2009]windy数
1026: [SCOI2009]windy数 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 4163 Solved: 1864[Submit][Sta ...
- bzoj1026: [SCOI2009]windy数(数位dp)
1026: [SCOI2009]windy数 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 8203 Solved: 3687[Submit][Sta ...
- 2018.06.30 BZOJ1026: [SCOI2009]windy数(数位dp)
1026: [SCOI2009]windy数 Time Limit: 1 Sec Memory Limit: 162 MB Description windy定义了一种windy数.不含前导零且相邻两 ...
- bzoj千题计划117:bzoj1026: [SCOI2009]windy数
http://www.lydsy.com/JudgeOnline/problem.php?id=1026 数位DP 如果前一位填的是0, 0是前导0,下一位可以随便填 0不是前导0,下一位不能填1 为 ...
- bzoj1026: [SCOI2009]windy数(传说你是数位DP)
1026: [SCOI2009]windy数 题目:传送门 题解: 其实之前年少无知的时候好像A过...表示当时并不知道什么数位DP 今天回来深造一发... 其实如果对这个算法稍有了解...看到这题的 ...
- [bzoj1026][SCOI2009]windy数_数位dp
windy数 bzoj-1026 题目大意:求一段区间中的windy数个数. 注释:如果一个数任意相邻两位的差的绝对值都不小于2,这个数就是windy数,没有前导0.$区间边界<=2\cdot ...
- [BZOJ1026][SCOI2009]windy数 解题报告|数位dp
Description windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道,在A和B之间,包括A和B,总共有多少个windy数? 一直 ...
- BZOJ1026: [SCOI2009]windy数
传送门 md直接wa了78次,身败名裂 没学过数位DP硬搞了一道数位DP的模板题,感觉非常的愉(sha)悦(cha). 二分转化枚举思想.首先DP预处理出来$f[i][j]$表示有$i$位且第$i$位 ...
随机推荐
- Linux中Eclipse下搭建Web开发环境
0. 准备工作 java环境,Linux下基本上都有含开源jdk的库,可直接下载,且不用配置环境变量,当然也可以官网下载后自己配置: Eclipse Neon,注意看清是64位还是32位,下载的应该是 ...
- mongodb 复制(副本集)
复制(副本集) 什么是复制 复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性,并可以保证数据的安全性 复制还允许从硬件故障和服务中断中恢复数据 为什么要复制 数据备份 数据灾 ...
- python 一致性哈希 分布式
hash_ring # -*- coding: utf-8 -*- """ hash_ring ~~~~~~~~~~~~~~ Implements consistent ...
- [知识梳理]课本1&2.1-2.5
面向对象的语言 出发点:更直接地描述客观世界中存在的事物(对象)以及它们之间的关系. 特点: 是高级语言. 将客观事物看作具有属性和行为的对象. 通过抽象找出同一类对象的共同属性和行为,形成类. 通过 ...
- python 学习笔记
1. 关于两者详细解释,参考链接:www.crifan.com/python_re_search_vs_re_findall/ 代码图
- java异常常见面试问题
java异常常见面试问题 一.java异常的理解 异常主要是处理编译期不能捕获的错误.出现问题时能继续顺利执行下去,而不导致程序终止,确保程序的健壮性. 处理过程:产生异常状态时,如果当前的conte ...
- Android 学习资料入门到精通(PDF集合)共54本
最近收集一些安卓入门到精通,包含游戏编程,网络编程,多媒体开发,需要学习朋友就下载保持下来,下载链接在最下面 下面是网盘内容 14天学会安卓开发_(完整版).pdf Android 4 游戏高级编程 ...
- intelj idea中JRebel激活
1.下载激活软件 https://github.com/ilanyu/ReverseProxy/releases/tag/v1.0 我这边下载的是: 2.双击运行 3.idea中, 不出意外,应该就激 ...
- 用于水和水蒸汽物性计算的Python模块——iapws
无论是火电还是核电,将能量转化为电能的方式主要还是烧开水,即加热水产生高压蒸汽驱动汽轮机做功再发电.在进行热力循环分析.流动传热计算时,需获得水和水蒸汽的物性参数.网上主流的水蒸汽物性计算程序是上海成 ...
- Windows10 64位系统安装 .NET Framework 3.5
1)下载NET Framework 3.5 [地址:https://pan.baidu.com/s/1c1FhXLY] 2)编辑NET Framework 3.5.bat ,修改sxs文件存放路径: ...