Description

windy定义了一种windy数。不含前导零且相邻两个数字之差至少为 \(2\) 的正整数被称为windy数。 windy想知道,

在 \(A\) 和 \(B\) 之间,包括 \(A\) 和 \(B\),总共有多少个windy数?

Limitation

\(1 \leq A \leq B \leq 2000000000\)

Solution

前天重写这个题,换了一种比较好写的DP方式,这里记下来。

考虑由于前导 \(0\) 和顶上界都最多可能有 \(1\) 中方案,因此直接使用一个 bool 变量记录即可。

设 \(f_{i, j}\) 是考虑前 \(i\) 位,第 \(i\) 位是 \(j\) 且不顶上界的方案数,这样的转移就非常好写了。、

Code

#include <cmath>
#include <cstdio>
#include <cstring> const int maxn = 100; int x, y;
int A[maxn], B[maxn];
ll frog[maxn][10]; int ReadNum(int *p);
ll calc(const int *const num, const int n); int main() {
freopen("1.in", "r", stdin);
int x = ReadNum(A); y = ReadNum(B);
for (int i = x - 1; ~i; --i) {
if ((--A[i]) >= 0) {
break;
} else {
A[i] = 9;
}
}
if (A[x] == 0) { --x; }
qw(calc(B, y) - calc(A, x), '\n', true);
return 0;
} int ReadNum(int *p) {
auto beg = p;
do *p = IPT::GetChar() - '0'; while ((*p < 0) || (*p > 9));
do *(++p) = IPT::GetChar() - '0'; while ((*p >= 0) && (*p <= 9));
return p - beg;
} ll calc(const int *const num, const int n) {
if (n <= 1) {
return num[0];
}
memset(frog, 0, sizeof frog);
bool upc = true;
for (int i = 1; i < num[0]; ++i) {
frog[0][i] = 1;
}
for (int i = 1; i < n; ++i) {
int di = i - 1;
for (int j = 0; j < 10; ++j) {
for (int k = 0; k < 10; ++k) if (abs(j - k) >= 2) {
frog[i][j] += frog[di][k];
}
++frog[i][j];
}
--frog[i][0];
if (upc) {
for (int k = 0; k < num[i]; ++k) if (abs(num[di] - k) >= 2) {
++frog[i][k];
}
if (abs(num[di] - num[i]) < 2) {
upc = false;
}
}
}
ll _ret = 0;
for (int i = 0, dn = n - 1; i < 10; ++i) {
_ret += frog[dn][i];
}
return _ret + upc;
}

最新文章

  1. Win8 传统桌面下无法上网的解决方法
  2. ionic实现手机检测app是否安装,未安装则下载安装包,已安装则打开app(未实现iOS平台)
  3. 源码阅读笔记 - 1 MSVC2015中的std::sort
  4. 墙国内新建Rails应用的要点(windows 7环境, Rails 4.2.0)
  5. linux BASH shell设置字体与背景颜色
  6. 【数论,找规律】Uva 11526 - H(n)
  7. nvmw install 失败. 需修改&quot;Msxml2.XMLHTTP&quot;为&quot;Msxml2.ServerXMLHTTP&quot;
  8. VMware双网卡实现虚拟机连开发板和Internet
  9. RaspberryPI 连接rs232模块接线图
  10. 微信小程序开发系列(一)小程序开发初体验
  11. Ubuntu和win10双系统Grup无法引导解决方案
  12. 翻译连载 |《你不知道的JS》姊妹篇 |《JavaScript 轻量级函数式编程》- 引言&前言
  13. MIP 技术进展月报:储存功能全新上线,MIP-Cache域名升级,校验更严谨
  14. VLAN模式
  15. linux - man 提示:-bash: man: command not found
  16. 2017-10-5模拟赛T2 小Z爱排序(sorting.*)
  17. Linux上磁盘热插拔
  18. linux 查找并kill进程
  19. Linux程序设计:进程通信
  20. Python学习笔记第九周

热门文章

  1. 使用docker安装gitlab,两台电脑gitlab库相互迁移
  2. mysql判断是否存在数据库和表,进行删除和创建
  3. Regex 首字母转大写/小写,全大写,全小写
  4. 调试 Go 的代码生成
  5. 2-kong的preserve_host和strip_uri解析
  6. Linux 常用命令 , 其他名 , 文件管理
  7. elasticsearch原理学习
  8. 写给自己的 SOA 和 RPC 理解
  9. WampServer出现You don’t have permission to access/on this server提示
  10. 阿里云查看本服务器 公网ip地址 命令