CodeForces 55D Beautiful numbers(数位dp)
数位dp,三个状态,dp[i][j][k],i状态表示位数,j状态表示各个位上数的最小公倍数,k状态表示余数
其中j共有48种状态,最大的是2520,所以状态k最多有2520个状态。
#include<stdio.h>
#include<math.h>
#include<string.h>
#define LL long long
LL dp[20][50][2520];
LL div[50],rdiv[2600],po[30];
LL a[4]={2,3,5,7},num[4]={3,2,1,1},cou=0,p[30];
void getdiv(int n,LL cur)//获取48个j状态
{
if(n==4){
div[cou]=cur;
rdiv[cur]=cou++;
return ;
}
getdiv(n+1,cur);
for(int i=0;i<num[n];i++)
{
cur*=a[n];
getdiv(n+1,cur);
}
}
void getpo()
{
po[1]=1;
for(int i=2;i<20;i++)
po[i]=po[i-1]*10;
}
LL gcd(LL a,LL b)
{
if(b==0)return a;
return gcd(b,a%b);
}
LL lcm(LL a,LL b)
{
if(b==0)return a;
LL p=gcd(a,b);
return a/p*b;
}
void init()//预处理出dp[i][j][k]
{
getdiv(0,1);
getpo();
int i,j,k,l;
LL tm,ss;
dp[0][0][0]=1;
for(i=1;i<20;i++){
for(j=0;j<10;j++){
for(k=0;k<48;k++){
for(l=0;l<2520;l++){
tm=(l+j*po[i])%2520;
ss=rdiv[lcm(div[k],j)];
dp[i][ss][tm]+=dp[i-1][k][l];
}
}
}
}
}
LL solve(LL n)
{
int i,j,k,l;
for(i=1;n;i++)
{
p[i]=n%10;
n/=10;
}
int len=i;
LL ans=0,cur1=0,cur2=1,tm,ss;//cur1表示前几位上的数的余数,cur2表示前几位的数的最小公倍数
for(i=len-1;i>0;i--)
{
for(j=0;j<p[i];j++)
{
for(k=0;k<48;k++)
{
ss=lcm(cur2,j);
ss=lcm(ss,div[k]);
tm=(cur1+j)*po[i]%ss;
for(l=(ss-tm)%ss;l<2520;l+=ss)//处理48种状态,2520个余数上合法的数
ans+=dp[i-1][k][l];
}
}
cur2=lcm(cur2,p[i]);
cur1=(cur1+p[i])*10%2520;
}
return ans;
}
int main()
{
int i,j,k,t;
LL m,n;
init();
scanf("%d",&t);
while(t--)
{
scanf("%I64d%I64d",&m,&n);
printf("%I64d\n",solve(n+1)-solve(m));
}
return 0;
}
CodeForces 55D Beautiful numbers(数位dp)的更多相关文章
- codeforces 55D - Beautiful numbers(数位DP+离散化)
D. Beautiful numbers time limit per test 4 seconds memory limit per test 256 megabytes input standar ...
- CodeForces - 55D - Beautiful numbers(数位DP,离散化)
链接: https://vjudge.net/problem/CodeForces-55D 题意: Volodya is an odd boy and his taste is strange as ...
- CodeForces - 55D Beautiful numbers —— 数位DP
题目链接:https://vjudge.net/problem/CodeForces-55D D. Beautiful numbers time limit per test 4 seconds me ...
- Codeforces - 55D Beautiful numbers (数位dp+数论)
题意:求[L,R](1<=L<=R<=9e18)区间中所有能被自己数位上的非零数整除的数的个数 分析:丛数据量可以分析出是用数位dp求解,区间个数可以转化为sum(R)-sum(L- ...
- codeforces 55D. Beautiful numbers 数位dp
题目链接 一个数, 他的所有位上的数都可以被这个数整除, 求出范围内满足条件的数的个数. dp[i][j][k], i表示第i位, j表示前几位的lcm是几, k表示这个数mod2520, 2520是 ...
- FZU2179/Codeforces 55D beautiful number 数位DP
题目大意: 求 1(m)到n直接有多少个数字x满足 x可以整出这个数字的每一位上的数字 思路: 整除每一位.只需要整除每一位的lcm即可 但是数字太大,dp状态怎么表示呢 发现 1~9的LCM 是2 ...
- CF 55D. Beautiful numbers(数位DP)
题目链接 这题,没想出来,根本没想到用最小公倍数来更新,一直想状态压缩,不过余数什么的根本存不下,看的von学长的blog,比着写了写,就是模版改改,不过状态转移构造不出,怎么着,都做不出来. #in ...
- CodeForces 55D "Beautiful numbers"(数位DP+离散化处理)
传送门 参考资料: [1]:CodeForces 55D Beautiful numbers(数位dp&&离散化) 我的理解: 起初,我先定义一个三维数组 dp[ i ][ j ][ ...
- Codeforces 55D. Beautiful numbers(数位DP,离散化)
Codeforces 55D. Beautiful numbers 题意 求[L,R]区间内有多少个数满足:该数能被其每一位数字都整除(如12,24,15等). 思路 一开始以为是数位DP的水题,觉得 ...
- 2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 J Beautiful Numbers (数位DP)
2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 J Beautiful Numbers (数位DP) 链接:https://ac.nowcoder.com/acm/contest/163/ ...
随机推荐
- centos7上安装与配置Tomcat7(整理篇)
1.检查tomcat7是否已经安装 rpm -qa | grep tomcat ps -ef | grep tomcat 第一条命令查看是用rpm安装过tomcat,由于我们倾向于安装解压版的tomc ...
- One-day-学习笔记-商品成交时发送短信
个人学习笔记(one) 根据需求:商品成交时发送短信 html代码省略..... Model代码省略..... /* * --------------------------------------- ...
- jquery.lazyload.js图片延迟加载
转:http://www.jb51.net/article/50273.htm 这篇文章主要介绍了Jquery图片延迟加载插件jquery.lazyload.js的使用方法,需要的朋友可以参考下 ...
- Servlet常用类
javax.servlet.ServletConfig;javax.servlet.ServletException;javax.servlet.http.HttpServlet;javax.serv ...
- Eclipse 代码自动补全
使用Eclipse开发Android时,发现代码补全功能太差,完全不像VS似的,输入一个字母就出现代码提示. 下面是在Eclipse中实现类似VS代码补全的方法: ①打开Eclipse->Win ...
- Node.js REPL终端
REPL表示读取评估和演示打印循环(Read Eval Print Loop),它代表一个命令输入和系统在交互模式的输出响应窗口控制台或Unix/ Linux的shell计算机环境. Node.js附 ...
- A Statistical View of Deep Learning (II): Auto-encoders and Free Energy
A Statistical View of Deep Learning (II): Auto-encoders and Free Energy With the success of discrimi ...
- WPAD 的原理及实现
WPAD 通过让浏览器自动发现代理服务器,使代理服务器对用户来说是透明的,进而轻松访问互联网.WPAD 可以借助 DNS 服务器或 DHCP 服务器来查询代理自动配置(PAC)文件的位置. 引言 代理 ...
- Jenkins安装入门
这是一次兴奋之旅哈..说不定用得着呢~~~:) 嘿嘿.. 安装很简单,JDK,MAVEN(如果),YUM或RPM包安装JENKINS(因为好像YUM安装好慢,不如RPM下载安装) 参考URL: htt ...
- 汉字转拼音的Java类库:JPinyin
JPinyin是一个汉字转拼音的Java开源类库,在PinYin4j的功能基础上做了一些改进. [JPinyin主要特性]1.准确.完善的字库:Unicode编码从4E00-9FA5范围及3007(〇 ...