Description
给定 $l$ 和 $r\ \left( 1 \leq l \leq r \leq 2 \times 10^9 \right)$,求区间 $[l,r]$ 有多少个 不含前导零且相邻两个数字之差至少为 $2$ 的正整数(即 $\rm{windy}$ 数)。
Source
Solution
数位DP 入门题。
用 $f_{pos,pre}$ 表示当前到了第 $len - pos + 1$ 位,上一位是 $pre$ 的 $\rm{windy}$ 数个数。
考虑用 记忆化搜索 实现 数位DP 。枚举每一位,保证当前位与上一位的差大于等于 $2$ 。注意判断是否有前导零,如果有或者刚开始搜,就把上一位设为 $11$(因为 $0 \sim 9$ 与 $11$ 的差都大于等于 $2$,保证下一位没有限制),具体实现详见代码。时间复杂度为 $O(\lg^2 n)$ 。
Code
1 |
|