\(Sol\)

数位\(dp\)常规套路题.

\(dp[i][j]\)表示从低位到高位填到第\(i\)位且第\(i\)位的数字为\(j\)的方案数.答案就是\(sol(r)-sol(l+1).\)这里\(dp\)的过程十分简单,一般出错的也就是计算小于等于\(x\)的\(windy\)数,所以这里简述一下这个流程:

首先是预处理出\(x\)的位数\(ct\),\(a[i]\)表示数\(x\)从低到高第\(i\)位的数字是多少,然后累计第一种安全态的答案\(as+=\sum _{i=1}^{ct-1}\sum _{j=1}^{9}f[i][j]\).

接着累计第二种安全态的答案,也就是第\(ct\)位(从低到高)的数小于\(a[ct]\)的,\(as+=\sum_{j=1}^{a[ct]-1}f[ct][j]\).

最后也就是最容易出错的地方便是统计危险态的答案.假设当前填到第\(i\)位且\(i\)到\(ct\)的数字都和\(x\)一样,那么第\(i-1\)位上填的数就有两个限制,一是要小于\(a[i-1]\),还有就是要与\(a[i]\)的差的绝对值要大于等于\(2\).

会发现上面的统计有两个漏洞,一是如果数\(x\)是\(windy\)数,那么会少算一个,这个问题很好解决,判断一下就好.令一个问题是假设当前填到\(i\),且\(abs(a[i]-a[i-1])<=2\),那么下一位就不能填\(a[i-1]\),那么也就不用继续统计危险态的答案了,直接\(break\)掉.

\(Code\)

Code

```cpp
#include
#define il inline
#define Ri register int
#define go(i,a,b) for(Ri i=a;i=b;--i)
#define e(i,u) for(Ri i=b[u];i;i=a[i].nt)
#define mem(a,b) memset(a,b,sizeof(a))
#define ll long long
#define db double
#define inf 2147483647
using namespace std;
il int read()
{
Ri x=0,y=1;char c=getchar();
while(c'9'){if(c=='-')y=-1;c=getchar();}
while(c>='0'&&c=2)f[i][j]+=f[i-1][k];
}
il int sol(Ri x)
{
if(!x)return 0;
Ri qvq=x,ct=0,ret=0;bool fl=1;
while(qvq){a[++ct]=qvq%10;qvq/=10;}
go(i,1,ct-1)
go(j,1,9)ret+=f[i][j];
go(i,1,a[ct]-1)ret+=f[ct][i];
yes(i,ct,2)
{
go(j,0,a[i-1]-1)
{
if(abs(j-a[i])>=2)ret+=f[i-1][j];
}
if(abs(a[i]-a[i-1])

随机推荐

  1. Data Flow-File Read-基本过程

  2. @bzoj - 4524@ [Cqoi2016]伪光滑数

    目录 @description@ @solution@ @version - 1@ @version - 2@ @accepted code@ @version - 1@ @version - 2@ ...

  3. 模板—插头dp(Ural 1519 Formula 1)

    括号表示法: 据说比下一个要快而且灵活. #include<iostream> #include<cstring> #include<cstdio> #define ...

  4. Postman使用入门

    https://jingyan.baidu.com/article/0f5fb09907e3046d8334ea2f.html Postman测试管理的单位是测试集(Collections),测试集内 ...

  5. 5分钟了解为什么学习Go

    1.什么是Go语言? Google开源 编译型语言 21世纪的C语言(主流编程语言都是单线程环境下发布的) 2.Go语言的特点? 简单易学习(类似python学习难度,自带格式化) 开发效率高 执行性 ...

  6. 2017年NOIP普及组复赛题解

    题目涉及算法: 成绩:入门题: 图书管理员:模拟: 棋盘:最短路/广搜: 跳房子:RMQ/二分答案/DP(本人解法). 成绩 题目链接:https://www.luogu.org/problemnew ...

  7. H3C 帧中继与水平分割(续)

  8. Activiti - 新一代的开源 BPM 引擎

    http://www.ibm.com/developerworks/cn/Java/j-lo-activiti1/ ****************************************** ...

  9. Python3 dir() 函数

    Python dir() 函数 描述 dir() 函数不带参数时,返回当前范围内的变量.方法和定义的类型列表:带参数时,返回参数的属性.方法列表.如果参数包含方法__dir__(),该方法将被调用.如 ...

  10. js基础——继承

    1.实现继承:原型链         function extend1() {//父类型           this.name = "张三";         }         ...