一、题目

点此看题

二、解法

首先一个数满足被一堆数整除等价于这个数满足被这一堆数的最小公倍数整除,[1,9][1,9][1,9]的最小公倍数是252025202520,且这个数有484848个因数。

定义dp[i][j][k][l]dp[i][j][k][l]dp[i][j][k][l],为iii位,是否顶到上界,模252025202520的余数为kkk,现在的最小公倍数为lll(映射之后存进去,最多484848个),最后再判断k%l=0k\%l=0k%l=0是否成立,成立就产生111的贡献。

好像代码我换了一个写法,去掉了第二维,只记录未顶到上界的dpdpdp值,顶到上界的dpdpdp值就自己去dpdpdp,不记录。

#include <cstdio>
#include <cstring>
#define int long long
const int M = 2525;
const int jzm = 2520;
int read()
{int x=0,flag=1;char c;while((c=getchar())<'0' || c>'9') if(c=='-') flag=-1;while(c>='0' && c<='9') x=(x<<3)+(x<<1)+(c^48),c=getchar();return x*flag;
}
int T,l,r,n,res,a[20],c[M],dp[20][M][50];
int gcd(int a,int b)
{return !b?a:gcd(b,a%b);
}
int lcm(int a,int b)
{if(!a || !b) return a|b;return a/gcd(a,b)*b;
}
int dfs(int x,int up,int y,int z)
{if(x==0) return y%z==0;if(!up && dp[x][y][c[z]]!=-1) return dp[x][y][c[z]];int t=0;for(int p=0;p<=9;p++){if(up && p>a[x]) continue;t+=dfs(x-1,(up&&p==a[x]),(y*10+p)%jzm,lcm(z,p));}if(!up) dp[x][y][c[z]]=t;return t;
}
int cal(int x)
{n=res=0;while(x) a[++n]=x%10,x/=10;return dfs(n,1,0,1);
}
signed main()
{for(int i=1;i<=jzm;i++)if(jzm%i==0)c[i]=++n;T=read();memset(dp,-1,sizeof dp);while(T--){l=read();r=read();printf("%lld\n",cal(r)-cal(l-1));}
}

CF55D Beautiful numbers相关推荐

  1. Codeforces Round #181 (Div. 2) C. Beautiful Numbers 排列组合 暴力

    C. Beautiful Numbers 题目连接: http://www.codeforces.com/contest/300/problem/C Description Vitaly is a v ...

  2. CodeForces - 55D Beautiful numbers

    题目链接:http://codeforces.com/problemset/problem/55/D 题意:求区间[L,R]有多少个Beautiful numbers.Beautiful number ...

  3. Codeforces Beta Round #51 D. Beautiful numbers 数位dp + 状态优化

    传送门 文章目录 题意: 思路: 题意: 思路: 数位dpdpdp挺经典的一个题辣,有一个很明显的状态就是f[pos][num][lcm]f[pos][num][lcm]f[pos][num][lcm ...

  4. D. Beautiful numbers

    题目链接:http://codeforces.com/problemset/problem/55/D D. Beautiful numbers time limit per test 4 second ...

  5. 数位DP CF 55D Beautiful numbers

    题目链接 题意:定义"beautiful number"为一个数n能整除所有数位上非0的数字 分析:即n是数位所有数字的最小公倍数的倍数.LCM(1到9)=2520.n满足是252 ...

  6. Codeforces 55D Beautiful numbers (数位DP)

    题意:有T组询问,每次询问区间[l, r]中的beautiful number有多少.beautiful number是指这个数可以被组成它的数字整除.例如15是beautiful number,因为 ...

  7. [CF55D]Beautiful Number 题解

    数位dp进阶题. 如果一个数能被它的所有数位整除,那么他一定可以被那些数位的\(LCM\)整除. 发现\(1-9\)的\(LCM\)是\(2520\),所以这些数位的\(LCM\)一定是\(2520\ ...

  8. 2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 J Beautiful Numbers

    传送门 题意:问你从[1,N]有多少个数能被自身的SOD(sum of digits)整除 题解:数位dp,枚举SOD,因为最多只有12位,所以只要枚举1到12*9,一维记录pos,二维记录当前剩余要 ...

  9. The 2018 ACM-ICPC上海大都会赛 J Beautiful Numbers (数位DP)

    题意:求小于等于N且能被自己所有位上数之和整除的数的个数. 分析:裸的数位dp.用一个三位数组dp[i][j][k]记录:第i位,之前数位之和为j,对某个mod余数为k的状态下满足条件的个数.这里mo ...

  10. CF 55D Beautiful numbers 数位DP

    思路: 要找一个数能被他的所有反的数字整除,只需求出这个数能被其数字的LCM整除.而LCM最大为5*7*8*9=2520: 如果直接开dp[20][2520][2520]会超内存,而2^3,3^2,5 ...

最新文章

  1. js字符串加密的几种方法
  2. Sidebar 左右菜单的使用
  3. Andriod:安卓线程实现页面的自动跳转
  4. 线性表【项目 - 求集合并集C语言】(带注释)
  5. ​Linux CPU 性能优化指南
  6. 台式电脑已连接但无法上网_电脑无法上网?五步帮你解决!
  7. Hackerlands:城市Hackerspaces的农村版本
  8. 【C】C语言内存字节对齐
  9. 无法安装数据库关系图支持对象的解决方法
  10. git 非空目录添加远程仓库地址
  11. java 获取保存存储路径配置文件
  12. MAX25————用vray还原模型在Substance Painter的光照以及材质效果
  13. 如何使用mp3转换器将wav转换成mp3格式
  14. 2015070610 - 看到很多所谓的大牛
  15. 如何修改图片的dpi?图片的dpi怎么调?
  16. 淘宝怎么选品技巧秘籍,做淘宝7分靠选货品
  17. Java基础笔记:Day_10 接口、匿名内部类
  18. 无线降噪蓝牙耳机对比:NANK南卡和苹果AirPods Pro哪个好用?
  19. 劲牌连续两年问鼎全国质量大奖背后的密码
  20. 《三国志》历代记(2)

热门文章

  1. 使用Windbg分析蓝屏原因
  2. sql server代码创建数据库详细过程
  3. java8实战教程,[JAVA] 汪大神Java8新特性及实战视频教程完整版
  4. 提高工作效率的软件推荐——我的ABC软件工具箱 6.0 最新版上线啦
  5. pmp 第六版 模拟卷3疑难问题
  6. Excel·VBA自定义函数扩展VLOOKUP
  7. Python解微分方程(验证数学建模第五版火箭发射模型)
  8. windows下把SD卡格式化成NTFS格式
  9. plsql development 注册码
  10. lisp6 暖通cad_这些高效插件,学CAD的基本用过两种以上