CF55D Beautiful numbers

题意

\(t(\le 10)\)次询问区间\([l,r](1\le l\le r\le 9\times 10^{18})\)中能被每一位上数整除的数的个数,0算可以整除任何数。


最开始写了个假做法,既没算0复杂度也是假的

最开始把每个模数都压进去了,后来发现只压2520就可以了

然后前两位压前\(i\)位与\(\bmod 2520\)的结果,第三位最开始压了每个数字出现集合,这样就很屑。

可以直接压数字集合的最小公倍数,仅有不到50个取值,做一个Hash存一下就可以了。

写起来也简单


Code:

#include <cstdio>
#include <cstring>
#define ll long long
const int p=2520;
ll dp[20][p][50];
int yuy[p],bit[20],po[20],cnt;
int gcd(int x,int y){return y?gcd(y,x%y):x;}
int LCM(int x,int y){return y?x*y/gcd(x,y):x;}
ll dfs(int pos,int res,int lcm,int lim)
{
if(!pos) return res%lcm==0;
if(!lim&&~dp[pos][res][yuy[lcm]]) return dp[pos][res][yuy[lcm]];
ll ret=0;
for(int i=0,up=lim?bit[pos]:9;i<=up;i++)
ret+=dfs(pos-1,(res+po[pos-1]*i)%p,LCM(lcm,i),lim&&i==up);
return lim?ret:dp[pos][res][yuy[lcm]]=ret;
}
ll cal(ll x)
{
int len=0;while(x) bit[++len]=x%10,x/=10;
return dfs(len,0,1,1);
}
int main()
{
memset(dp,-1,sizeof dp);
int T;scanf("%d",&T);
for(int i=1;i<p;i++)
if(p%i==0)
yuy[i]=++cnt;
po[0]=1;for(int i=1;i<=18;i++) po[i]=po[i-1]*10%p;
while(T--)
{
ll l,r;scanf("%lld%lld",&l,&r);
printf("%lld\n",cal(r)-cal(l-1));
}
return 0;
}

2019.2.10

最新文章

  1. git命令分类图
  2. 关于在linux中使用图形界面的网络管理工具
  3. MongoDB学习笔记一:入门
  4. phonegap3.0 simple
  5. vc读写注册表
  6. Ubuntu下VSFTPD(五)(匿名FTP设置方法)
  7. Apache 相关配置
  8. scrapy爬虫框架
  9. Sorting a Three-Valued Sequence(三值的排序)
  10. Python error: Microsoft Visual C++ 9.0 is required (Unable to find vcvarsall.bat)解决方案
  11. 2014/08/31 Zushi
  12. element-ui Carousel 走马灯源码分析整理笔记(十一)
  13. Hunter -- 批量文件管理工具
  14. 常见的压缩文件格式案例tarZ
  15. The type org.springframework.context.ConfigurableApplicationContext cannot be resolved.
  16. 20155211 Exp5 MSF基础应用
  17. Python之路3【知识点】白话Python编码和文件操作(截载)
  18. jq expando &amp;&amp; $.data()
  19. Vue使用过渡类名实现动画和自定义前缀
  20. Windows Azure: Service Bus Relay

热门文章

  1. C# 队列和栈 线程安全
  2. Codeforces 996E Leaving the Bar (随机化)
  3. Iptables防火墙规则使用梳理
  4. Centos下MooseFS(MFS)分布式存储共享环境部署记录
  5. WEEK 7:团队项目的感想
  6. 【CV】ICCV2015_Describing Videos by Exploiting Temporal Structure
  7. 《Linux内核分析》第六周学习小结
  8. Maven相关问题解决.docx
  9. JavaScript的类、对象、原型、继承、引用
  10. Eclipse: Difference between clean, build and publish