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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int shu[100], dp[20][20];
int swdp(int len, int pre, bool pre_0, bool limit){
if(len == 0) return 1;
if(!limit && dp[len][pre] && !pre_0) return dp[len][pre];
int cnt = 0, mx = limit ? shu[len] : 9;
for(int i = 0; i <= mx; i++){
int q = i;
if(abs(i - pre) < 2) continue;
if(pre_0 && i == 0) q = -56;
cnt += swdp(len - 1, q, q == -56,limit && i == mx);
}
return (!limit && !pre_0) ? dp[len][pre] = cnt : cnt;
}
int solve(int x){
if(x == -1) return 0;
memset(shu, 0, sizeof(shu));
int i = 0;
while(x){
shu[++i] = x % 10;
x = x / 10;
}
swdp(i, -56, true, true);
}
int main(){
int a, b;
scanf("%d %d", &a, &b);
printf("%d\n", solve(b) - solve(a - 1));
}//9 1000 528