CodeForces 55D Beautiful numbers

Posted rui-4825

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CodeForces 55D Beautiful numbers相关的知识,希望对你有一定的参考价值。

CodeForces 55D Beautiful numbers

一句话题意:有T组询问,每次询问区间[l, r]中的beautiful number有多少。beautiful number是指这个数可以被组成它的数字整除。例如15是beautiful number,因为15可以被1整除,也可以被5整除。25不是beautiful number, 25不能被2整除。

Solution

想到一半跑去水题解了,真不想不到还有个2520……

第一选择方法
拿到题之后还是先想了暴力
枚举每一位上的数字判断整除
那一看数据范围竟然达到了9e18
那就是数位DP
实质上数位DP也是一种暴力枚举的方式
判断各个区间满足条件的个数

第二处理第一步:如何判断能否被整除
显然要取每一位上的数字的最小公倍数

第三步数组的定义
老规矩,先看题意里面需要我们记录什么
数位DP肯定要有数位
判断是否整除需要当前的数和最小公倍数
那么就是三维数组dp[数位][当前的数][最小公倍数]

第四步数组的空间占用
第一维20位
第二维要对2520取mod,因为1~9的最小公倍数是2520(没想到)
考虑到第三维会有许多数字不会出现,例如质数之类的
所以只记录2520的因数,共48个,可打表取出

第五步也是最后一步
状态转移方程
(dp[i][j][k]={sum _{x=1}^{x_{max}}})(dp[i-1][(j*10+x))%(2520])([lcm(k,x)])
代码还没写……

以上是关于CodeForces 55D Beautiful numbers的主要内容,如果未能解决你的问题,请参考以下文章

CodeForces - 55D Beautiful numbers (数位DP)

CodeForces 55D Beautiful numbers

CodeForces 55D - Beautiful numbers - [数位DP+离散化]

codeforces55D Beautiful numbers

CodeForces - 55D - Beautiful numbers(数位DP,离散化)

CodeForces 55D Beautiful numbers