正题

题目链接:https://www.luogu.com.cn/problem/CF55D


题目大意

求[l,r][l,r][l,r]中有多少个数使得它可以被它的所有非000位整除。


解题思路

因为这些数的lcmlcmlcm一定是lcm(1,2,3,4,5,6,7,8,9,10)=2520lcm(1,2,3,4,5,6,7,8,9,10)=2520lcm(1,2,3,4,5,6,7,8,9,10)=2520的约数,所以我们只需要记录这个数%2520\% 2520%2520的值即可,设fi,j,kf_{i,j,k}fi,j,k​表示到第iii位,这个数字%2520\% 2520%2520的值为jjj,当前非000数的lcmlcmlcm为kkk时的结果,当然kkk这一维要离散化。


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#define ll long long
using namespace std;
const ll P=2520;
ll t,f[20][50][P],a[20],rev[P+10],cnt;
ll gcd(ll x,ll y)
{return (!y)?x:gcd(y,x%y);}
ll dfs(ll x,ll lcm,ll v,bool sp){if(x<0)return (v%lcm==0);if(!sp&&f[x][rev[lcm]][v]>=0)return f[x][rev[lcm]][v];ll sum=0,lim=(sp==1)?a[x]:9;for(ll i=0;i<=lim;i++){if(!i)sum+=dfs(x-1,lcm,v*10%P,sp&(i==lim));else sum+=dfs(x-1,lcm*i/gcd(lcm,i),(v*10+i)%P,sp&(i==lim));}if(sp)return sum;return f[x][rev[lcm]][v]=sum;
}
ll get(long long x){ll i=0;if(!x)return 1;for(i=0;x;x/=10,i++)a[i]=x%10;return dfs(i-1,1,0,1);
}
int main()
{cin>>t; memset(f,-1,sizeof(f));for(int i=1;i<=P;i++)if(P%i==0)rev[i]=++cnt;while(t--){ll l,r;cin>>l>>r;cout<<get(r)-get(l-1)<<endl;}return 0;
}

CF55D-Beautiful numbers【数位dp】相关推荐

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

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

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

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

  3. CF 55D Beautiful numbers 数位DP

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

  4. Educational Codeforces Round 8 D. Magic Numbers 数位DP

    D. Magic Numbers 题目连接: http://www.codeforces.com/contest/628/problem/D Description Consider the deci ...

  5. CodeForces - 628D Magic Numbers(数位dp)

    题目链接:点击查看 题目大意:首先规定一个不含前导零的数字如果满足: 从最高位开始,偶数位置全为 ddd 从最高位开始,奇数位置不能出现 ddd 则称该数字为 d−magicd-magicd−magi ...

  6. SPOJ - BALNUM Balanced Numbers(数位dp+进制转换)

    题目链接:点击查看 题目大意:给出平衡数的定义:每一个偶数出现的次数必须是奇数次,每一个奇数出现的次数必须是偶数次,求给定区间中有多少个平衡数 题目分析:数位dp,这个题目就难在怎么确定状态转移,本来 ...

  7. POJ - 3252 Round Numbers(数位dp)

    题目链接:点击查看 题目大意:规定一个数如果二进制中0的个数大于等于1的个数,则这个数称为"整数",问闭区间a,b中有多少个整数 题目分析:数位dp,dp[pos][c0][c1] ...

  8. codeforces 628D. Magic Numbers 数位dp

    题目链接 给两个数m, d. 两个数a, b. a, b长度小于2000, 长度相等.求在a, b之间的数x, x%m==0, 并且从高位往低位数, 奇数位的数全部不等于d, 偶数为的数全都等于d, ...

  9. spoj Balanced Numbers(数位dp)

    一个数字是Balanced Numbers,当且仅当组成这个数字的数,奇数出现偶数次,偶数出现奇数次 一下子就相到了三进制状压,数组开小了,一直wa,都不报re, 使用记忆化搜索,dp[i][s] 表 ...

  10. 湖南大学第十四届ACM程序设计新生杯(重现赛)- FFind the AFei Numbers(数位dp)

    题目链接 题目描述 AFei loves numbers. He defines the natural number containing "520" as the AFei n ...

最新文章

  1. jstatd - Virtual Machine jstat Daemon
  2. 【C++】 64_C++中的异常处理 (上)
  3. uvc音频传输协议_蓝牙中的三种音频编码:Apt-X、SBC、AAC,请问分别有什么区别?...
  4. 适合ipad的python编程软件-如何用iPad运行Python代码?
  5. Firebug高级用法 - Web开发的利器
  6. 004_SpringBoot整合Listener
  7. 计算机视觉算法实战书籍推荐_岗位内推 | 字节跳动招聘NLP、计算机视觉、推荐算法实习生...
  8. GARFIELD@02-24-2005
  9. 【转】TFS自动签出解决方案sln或者项目文件csproj的解决办法
  10. 【转】MyEclipse快捷键大全(绝对全)
  11. [self addChild:gameLayer z:1 tag:LayerTagGameLayer] z值含义
  12. List的【addAll(List list)】方法
  13. 贾俊平统计学第七版课后习题答案
  14. 海创软件组-20200614-用户自定义工程认证调查模板-大创项目申报书
  15. mysql 时间语句,mysql语句大全_mysql时间查询常用语句大全
  16. MTK MT8735射频设计资料参考
  17. OSAL(操作系统抽象层)
  18. 阿里巴巴java开发规范手册
  19. CSS :hover选择器
  20. 中文版Google App Engine入门指南

热门文章

  1. java 回调函数传值_说明Java的传递与回调机制的代码示例分享
  2. AB.RSLogix500软件 下载分享
  3. 无线投屏视频经过服务器吗,无线投屏方案
  4. android谷歌安装插件,安卓手机安装CHROME插件
  5. 重力坝计算c语言程序,混凝土重力坝计算程序
  6. excel题库做成刷题得html,实例教你制作简易的Excel出题库,送给在一直忙碌的你!...
  7. 【分享】PDF批量转JPG方法
  8. Qt网络编程-简易版UDP单播通信入门Demo(3)
  9. 采用静态编译方式防止易语言小程序被误杀
  10. mysql 名次语法规则_Mysql排名问题