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/ ...
随机推荐
- js 之 复制一段代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 项目管理模式——Projects
Github 新的项目管理模式——Projects Github 新的项目管理模式——Projects Issues Github 中传统的项目管理是使用 issue 和 pull request 进 ...
- refreshcontrol 实现下拉刷新的功能
该组件实现下拉刷新的功能.不过该组件是用在ScrollView的内部的,为ScrollView添加一个下拉刷新的功能.当ScrollView的垂直方向的偏移量scrollY:0的时候,手指往下拖拽Sc ...
- test知识
内部测试SIT ——system integration testcase 用户测试UAT——user acceptance test SIT是集成测试UAT是验收测试从时间上看,UAT要在SIT后面 ...
- Node.js包(JXcore)
Node.js的代码是开放的,并准备好被复制像任何其他Javascript代码.但现在它不可能的了.JXcore 这是一个开源项目,引入了包装和源文件和其他资源加密成JX包一个独特的功能. 考虑大型项 ...
- BZOJ 3744 Gty的妹子序列
Description 我早已习惯你不在身边, 人间四月天 寂寞断了弦. 回望身后蓝天, 跟再见说再见-- 某天,蒟蒻Autumn发现了从 Gty的妹子树上掉落下来了许多妹子,他发现 她们排成了一个序 ...
- BZOJ 1588 营业额统计
Description 营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每 ...
- 利用函数索引优化<>
SQL> select count(*),ID from test_2 group by id; COUNT(*) ID ---------- ---------- 131072 1 11796 ...
- -_-#【CSS】注释
- 【转】android开发中如何结束所有的activity
原文网址:http://java--hhf.iteye.com/blog/1826880 每一个activity都有自己的生命周期,被打开了最终就要被关闭. 四种结束当前的activity方法 //关 ...