[暑假集训--数位dp]UESTC250 windy数

windy定义了一种windy数。

不含前导零且相邻两个数字之差至少为22 的正整数被称为windy数。

windy想知道,在AA 和BB 之间,包括AA 和BB ,总共有多少个windy数?

Input

包含两个整数,AA BB 。

满足 1≤A≤B≤20000000001≤A≤B≤2000000000 .

OutputSample Input

1 10

Sample Output

9

记一下上一位出现的数是啥

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<cstring>
 4 #include<cstdlib>
 5 #include<algorithm>
 6 #include<cmath>
 7 #include<queue>
 8 #include<deque>
 9 #include<set>
10 #include<map>
11 #include<ctime>
12 #define LL long long
13 #define inf 0x7ffffff
14 #define pa pair<int,int>
15 #define mkp(a,b) make_pair(a,b)
16 #define pi 3.1415926535897932384626433832795028841971
17 using namespace std;
18 inline LL read()
19 {
20     LL x=0,f=1;char ch=getchar();
21     while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();}
22     while(ch>=‘0‘&&ch<=‘9‘){x=x*10+ch-‘0‘;ch=getchar();}
23     return x*f;
24 }
25 LL n,len,l,r;
26 LL f[20][11][2];
27 int d[110];
28 inline LL dfs(int now,int dat,int lead,int fp)
29 {
30     if (now==1)return !lead;
31     if (!fp&&f[now][dat][lead]!=-1)return f[now][dat][lead];
32     LL ans=0,mx=fp?d[now-1]:9;
33     for (int i=0;i<=mx;i++)
34     {
35         if (!lead&&(i==dat-1||i==dat||i==dat+1))continue;
36         ans+=dfs(now-1,i,lead&&i==0&&now-1!=1,fp&&i==d[now-1]);
37     }
38     if (!fp)f[now][dat][lead]=ans;
39     return ans;
40 }
41 inline LL calc(LL x)
42 {
43     if (!x)return 1;
44     LL xxx=x;
45     len=0;
46     while (xxx)
47     {
48         d[++len]=xxx%10;
49         xxx/=10;
50     }
51     LL sum=0;
52     sum+=dfs(len,0,1,0);
53     for (int i=1;i<=d[len];i++)
54         sum+=dfs(len,i,0,i==d[len]);
55     return sum;
56 }
57 main()
58 {
59     while (~scanf("%lld%lld",&l,&r))
60     {
61         memset(f,-1,sizeof(f));
62         printf("%lld\n",calc(r)-calc(l-1));
63     }
64 }

UESTC 250

时间: 2024-12-28 14:57:50

[暑假集训--数位dp]UESTC250 windy数的相关文章

[暑假集训--数位dp]LightOj1205 Palindromic Numbers

A palindromic number or numeral palindrome is a 'symmetrical' number like 16461 that remains the same when its digits are reversed. In this problem you will be given two integers i j, you have to find the number of palindromic numbers between i and j

数位dp——BZOJ1026 Windy数

1026: [SCOI2009]windy数 Time Limit: 1 Sec  Memory Limit: 162 MB Description windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道,在A和B之间,包括A和B,总共有多少个windy数? Input 包含两个整数,A B. Output 一个整数 Sample Input [输入样例一] 1 10 [输入样例二] 25 50 Sample Output [输出样例

[暑假集训--数位dp]hdu3652 B-number

A wqb-number, or B-number for short, is a non-negative integer whose decimal form contains the sub- string "13" and can be divided by 13. For example, 130 and 2613 are wqb-numbers, but 143 and 2639 are not. Your task is to calculate how many wqb

[暑假集训--数位dp]hdu5898 odd-even number

For a number,if the length of continuous odd digits is even and the length of continuous even digits is odd,we call it odd-even number.Now we want to know the amount of odd-even number between L,R(1<=L<=R<= 9*10^18). Input First line a t,then t c

[暑假集训--数位dp]LightOj1032 Fast Bit Calculations

A bit is a binary digit, taking a logical value of either 1 or 0 (also referred to as "true" or "false" respectively). And every decimal number has a binary representation which is actually a series of bits. If a bit of a number is 1 a

[暑假集训--数位dp]cf55D Beautiful numbers

Volodya is an odd boy and his taste is strange as well. It seems to him that a positive integer number is beautiful if and only if it is divisible by each of its nonzero digits. We will not argue with this and just count the quantity of beautiful num

[暑假集训--数位dp]LightOJ1140 How Many Zeroes?

Jimmy writes down the decimal representations of all natural numbers between and including m and n, (m ≤ n). How many zeroes will he write down? Input Input starts with an integer T (≤ 11000), denoting the number of test cases. Each case contains two

[暑假集训--数位dp]hdu5787 K-wolf Number

Alice thinks an integer x is a K-wolf number, if every K adjacent digits in decimal representation of x is pairwised different. Given (L,R,K), please count how many K-wolf numbers in range of L,RL,R . Input The input contains multiple test cases. The

【一本通提高数位动态规划】windy数

传送门[一本通提高数位动态规划]windy数 #include<bits/stdc++.h> using namespace std; #define ll long long ll dp[15][15],ans; bool vis[15][15]; ll a[15]; ll l,r,len; ll dfs(ll pos,ll pre,ll zero,ll limit) { if(pos>len)return 1; if(!limit&&vis[pos][pre])ret