\(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. 设计模式 - 工厂模式(factory pattern) 具体解释

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u012515223/article/details/27081511 工厂模式(factory pa ...

  2. oracle函数 extract(c1 from d1)

    [功能]:日期/时间d1中,参数(c1)的值 [参数]:d1日期型(date)/日期时间型(timestamp),c1为字符型(参数) [参数表]:c1对应的参数表详见示例 [返回]:字符 [示例] ...

  3. 【SDOI2015】bzoj3990 排序

    A. 排序 题目描述 输入格式 输出格式 一行,一个整数,表示可以将数组A从小到大排序的不同的操作序列的个数. 样例 样例输入 3 7 8 5 6 1 2 4 3 样例输出 6 数据范围与提示 对于3 ...

  4. python基础之包的导入

    包的导入 python是一门灵活性的语言 ,也可以说python是一门胶水语言,顾名思义,就是可一导入各类的包, python的包可是说是所有语言中最多的.当然导入包大部分是为了更方便,更简便,效率更 ...

  5. UTF-8与UTF-8 BOM

    在我们通常使用的windows系统中,我发现了一个有趣的现象.我新建一个空的文本文档,点击文件-另存为-编码选择UTF-8,然后保存.此时这个文件明明是空的,却占了3字节大小.原因在于:此时保存的编码 ...

  6. Fish Shell使用心得

    Fish的官网宣传语是 Finally, a command line shell for the 90s. 翻译过来就是 Fish shell 是一个为90后准备的 shell. 有人说:" ...

  7. oracle避免在索引列上使用NOT

    通常, 我们要避免在索引列上使用NOT, NOT会产生在和在索引列上使用函数相同的 影响. 当ORACLE”遇到”NOT,他就会停止使用索引转而执行全表扫描. 举例: 低效: (这里,不使用索引) S ...

  8. SuperSocket进程级别隔离

    在 SuperSocket 1.5 中, 我们增加了 AppDomain 级别隔离的功能,让你可以运行多个服务器实例在相互独立的 AppDomain 上. 此功能提供了较高级别的安全性和资源的隔离,并 ...

  9. lrj 9.4.1 最长上升子序列 LIS

    p275 d(i)是以Ai为结尾的最长上升子序列的长度 <算法竞赛入门经典-训练指南>p62 问题6 提供了一种优化到 O(nlogn)的方法. 文本中用g(i)表示d值为i的最小状态编号 ...

  10. 【codeforces 766D】Mahmoud and a Dictionary

    time limit per test4 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...