题目描述

windy定义了一种windy数。不含前导零且相邻两个数字之差至少为2的正整数被称为windy数。 windy想知道,在A和B之间,包括A和B,总共有多少个windy数?

输入

包含两个整数,A B。

输出

一个整数,表示答案

样例输入

【输入样例一】
1 10
【输入样例二】
25 50

样例输出

【输出样例一】
9
【输出样例二】
20


题解

数位dp

快联赛了重写了一下,发现以前写的太傻逼了= =

由于加一个数位的贡献只与最高位有关,因此设 $f[i][j]$ 表示 $i$ 位数,最高位为 $j$ 的数的个数。

那么显然可以得到 $f[i][j]=\sum\limits_{|j-k|\le 2}f[i-1][k]$ 。

预处理出 $f$ 数组后即可进行数位dp。

先把位数不满的算上,然后再从高位到低位把该位不满的加入答案中。

此时需要记录上一个数位是什么,在枚举当前数位时需要满足当前位的条件。并且如果上一个与当前数位产生冲突则不再有满足条件的数,应当跳出循环。

把询问区间转化为 $[1,n)$ 的半开半闭区间更容易处理一些。

代码中为了避免一些细节(比如最高位只能处理到 $2*10^9$ 之类的),开了long long。

#include <cstdio>
typedef long long ll;
ll f[11][10] , b[11];
inline int abs(int x)
{
return x > 0 ? x : -x;
}
void init()
{
int i , j , k;
b[0] = 1 , b[1] = 10;
for(i = 0 ; i < 10 ; i ++ ) f[1][i] = 1;
for(i = 2 ; i < 11 ; i ++ )
{
b[i] = b[i - 1] * 10;
for(j = 0 ; j < 10 ; j ++ )
for(k = 0 ; k < 10 ; k ++ )
if(abs(j - k) >= 2)
f[i][j] += f[i - 1][k];
}
}
ll calc(ll n)
{
int i , j , last = -1 , di = 1;
ll ans = 0;
for(i = 1 ; b[i] <= n ; i ++ )
for(j = 1 ; j < 10 ; j ++ )
ans += f[i][j];
for( ; i ; i -- )
{
for(j = di ; j < n / b[i - 1] % 10 ; j ++ )
if(abs(j - last) >= 2)
ans += f[i][j];
if(abs(n / b[i - 1] % 10 - last) < 2) break;
last = n / b[i - 1] % 10 , di = 0;
}
return ans;
}
int main()
{
init();
ll n , m;
scanf("%lld%lld" , &n , &m);
printf("%lld\n" , calc(m + 1) - calc(n));
return 0;
}

最新文章

  1. vwampserver2.5-apache2.4.9允许外部访问的配置
  2. [问题2014A08] 复旦高等代数 I(14级)每周一题(第十教学周)
  3. 【Qt】使用QProcess调用其它程序或脚本
  4. SQL30081N 检测到通信错误。正在使用的通信协议:&quot;TCP/IP&quot;
  5. 窥探JVM内存分配和回收的过程
  6. PHP学习笔记(5) - 选择一个合格的框架
  7. oprofile使用方法
  8. 新浪微博2.5.1 for Android 去广告
  9. VisualStudio替换所有空行
  10. .net常見面試題(三)
  11. 搭建VPN服务器之PPTP
  12. -_-#【Canvas】圆弧运动
  13. HashMap和HashSet的源代码分析
  14. 3386/1752: [Usaco2004 Nov]Til the Cows Come Home 带奶牛回家
  15. pip安装selenium报错:Read timed out
  16. api-gateway实践(08)新服务网关 - 云端发布和日志查看
  17. Catalan卡特兰数入门
  18. 手写简单PE
  19. ASP.NET MVC案例教程(五)
  20. MySQL8的注意点

热门文章

  1. 成都Uber优步司机奖励政策(2月17日)
  2. http性能测试点滴
  3. MVC下的Area区域知识点
  4. generator-ivweb 基于react-redux的多页脚手架
  5. 结合BeautifulSoup和hackhttp的爬虫实例
  6. OSG-CompositeViewer
  7. 不老的神器--namp,awvs
  8. unable to access android sdk add-on list and SDK 更新镜像设置
  9. AC 自动机——多模式串匹配
  10. 又见CLOSE_WAIT