【问题描述】
windy定义了一种windy数。
不含前导零且相邻两个数字之差至少为2的正整数被称为windy数。
windy想知道,在A和B之间,包括A和B,总共有多少个windy数?
【输入格式】
输入包含两个整数,A B。
【输出格式】
输出包含一个整数。
【输入样例一】
1 10
【输出样例一】
9
【输入样例二】
25 50
【输出样例二】
20
【数据规模和约定】
20%的数据,满足 1 <= A <= B <= 1 000 000 。
100%的数据,满足 1 <= A <= B <= 2 000 000 000 。
CODE<代码> ①
#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;
int a[20];
long long dp[20][12];
int dfs(int i, int s, int e, int pre)
{
if(i==-1)
return s==1;
if(!e && ~dp[i][pre] && s)
return dp[i][pre];
int res=0;
int u=e?a[i]:9;
for(int d=0; d<=u; ++d)
if(!s||abs(pre-d)>=2)
res+=dfs(i-1,s||d,e && (d==u),d);
if (!e&&s)
dp[i][pre]=res;
return res;
}
int solve(int x)
{
int pos=0;
while(x)
{
a[pos++]=x%10;
x/=10;
}
return dfs(pos-1,0