1026: [SCOI2009]windy数 - BZOJ
2014-03-28 11:19
375 查看
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
【数据规模和约定】
20%的数据,满足 1 <= A <= B <= 1000000 。
100%的数据,满足 1 <= A <= B <= 2000000000 。
dp,f[i,j]表示有i位,最高位是j的windy数有多少(当然,这里有前导0)
我们只要会算1到x有多少windy数,就可以通过减法得到a到b的windy数有多少个
我们先不考虑每一位的限制,最后减掉不合法的就行了
考虑怎么才不合法,就是windy数比x大
即高位全部一样,第i位大与x的第i位,就减去它的方案数,但是要注意,高位一样可能就不是windy数了,所以从高往低做,不可能是windy数的时候就退出
实在不懂可以看代码
View Code
windy定义了一种windy数。不含前导零且相邻两个数字之差至少为2的正整数被称为windy数。 windy想知道,在A和B之间,包括A和B,总共有多少个windy数?
Input
包含两个整数,A B。
Output
一个整数。
Sample Input
【输入样例一】
1 10
【输入样例二】
25 50
Sample Output
【输出样例一】
9
【输出样例二】
20
【数据规模和约定】
20%的数据,满足 1 <= A <= B <= 1000000 。
100%的数据,满足 1 <= A <= B <= 2000000000 。
dp,f[i,j]表示有i位,最高位是j的windy数有多少(当然,这里有前导0)
我们只要会算1到x有多少windy数,就可以通过减法得到a到b的windy数有多少个
我们先不考虑每一位的限制,最后减掉不合法的就行了
考虑怎么才不合法,就是windy数比x大
即高位全部一样,第i位大与x的第i位,就减去它的方案数,但是要注意,高位一样可能就不是windy数了,所以从高往低做,不可能是windy数的时候就退出
实在不懂可以看代码
var f:array[0..10,0..10]of int64; i,j,k:longint; a,b:int64; function fx(x:int64):int64; var i,j,k:longint; s:array[0..11]of longint; begin i:=0; while x>0 do begin inc(i); s[i]:=x mod 10; x:=x div 10; end; fx:=0; for j:=1 to i do for k:=1 to 9 do inc(fx,f[j,k]); s[i+1]:=12; for j:=s[i]+1 to 9 do dec(fx,f[i,j]); while (i>1) and (abs(s[i]-s[i+1])>1) do begin for j:=s[i-1]+1 to 9 do if abs(s[i]-j)>1 then dec(fx,f[i-1,j]); dec(i); end; end; begin read(a,b); for i:=0 to 9 do f[1,i]:=1; for i:=2 to 10 do for j:=0 to 9 do for k:=0 to 9 do if abs(j-k)>1 then inc(f[i,j],f[i-1,k]); write(fx(b)-fx(a-1)); end.
View Code
相关文章推荐
- BZOJ 1026 [SCOI2009]windy数
- _bzoj1026 [SCOI2009]windy数【数位dp】
- [bzoj]1026: [SCOI2009]windy数
- 【BZOJ1026】【SCOI2009】windy数(数位dp)
- bzoj1026: [SCOI2009]windy数
- BZOJ.1026.[SCOI2009]windy数(数位DP)
- BZOJ 1026 1026: [SCOI2009]windy数
- BZOJ 1026 [SCOI2009]windy数
- BZOJ1026 [SCOI2009] windy数
- 【数位DP】bzoj1026: [SCOI2009]windy数
- [数位dp] bzoj1026: [SCOI2009]windy数
- BZOJ 1026 [SCOI2009]windy数 数位dp
- bzoj 1026: [SCOI2009]windy数 & 数位DP算法笔记
- bzoj1026 [SCOI2009]windy数
- bzoj1026 [SCOI2009]windy数
- 【数位DP】bzoj1026: [SCOI2009]windy数
- [省选前题目整理][BZOJ 1026][SCOI 2009]windy数(数位DP)
- bzoj1026: [SCOI2009]windy数 数位dp
- [BZOJ1026][SCOI2009]windy数
- BZOJ 1026([SCOI2009]windy数-数位DPlevel up)