[Ahoi2009]self 同类分布
1799: [Ahoi2009]self 同类分布
Time Limit: 50 Sec Memory Limit: 64 MB
Submit: 2357 Solved: 1079
[Submit][Status][Discuss]
Description
Sample Input
Sample Output
HINT
【约束条件】1 ≤ a ≤ b ≤ 10^18
Source
qingdaobaibai的题解
因为考虑到直接dp不可行,我们先枚举数字之和,共有9*18种,f[i][j][k][2]表示长度为i数字之和为j,模当前枚举的数字之和为k的是否严格小于该数的种类数。
那么f[i][j][k]-->f[i+1][j+p][(k*10+p)%mod]大概就是这样
#include<bits/stdc++.h>
#define rg register
#define il inline
#define co const
template<class T>il T read(){
rg T data=0,w=1;rg char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') w=-1;ch=getchar();}
while(isdigit(ch)) data=data*10+ch-'0',ch=getchar();
return data*w;
}
template<class T>il T read(rg T&x) {return x=read<T>();}
typedef long long ll;
co int N=200,L=21;
ll f[L][N][N][2];
int n[L];
ll calc(ll x,int P){
if(!x) return 0;
memset(f,0,sizeof f);
int t=0;
while(x) n[++t]=x%10,x/=10;
f[t+1][0][0][0]=1;
for(int i=t+1;i>1;--i)
for(int j=0;j<=P;++j)
for(int k=0;k<P;++k)if(f[i][j][k][0]||f[i][j][k][1])
for(int p=0;p<10;++p){
int w=(10*k+p)%P;
if(p<n[i-1]&&j+p<=P) f[i-1][j+p][w][1]+=f[i][j][k][0];
else if(p==n[i-1]&&j+p<=P) f[i-1][j+p][w][0]+=f[i][j][k][0];
if(f[i][j][k][1]&&j+p<=P) f[i-1][j+p][w][1]+=f[i][j][k][1];
}
return f[1][P][0][0]+f[1][P][0][1];
}
int main(){
ll a=read<ll>(),b=read<ll>(),ans=0;
for(int i=1;i<=9*18;++i) ans+=calc(b,i)-calc(a-1,i);
printf("%lld\n",ans);
return 0;
}
[Ahoi2009]self 同类分布的更多相关文章
- bzoj 1799: [Ahoi2009]self 同类分布 数位dp
1799: [Ahoi2009]self 同类分布 Time Limit: 50 Sec Memory Limit: 64 MB[Submit][Status][Discuss] Descripti ...
- bzoj1799: [Ahoi2009]self 同类分布
数位dp 先从1到162枚举各位数之和 s[i][j][k][l]表示i位数,第一位小于等于j,当前各位数字和为k,当前取模余数为l的方案数 然后脑补一下转移就行了 详见代码 #include < ...
- BZOJ 1799 - [AHOI2009]self 同类分布 - 枚举 数位DP
Description 找出$[L, R]$ 区间内有多少数, 各位数字和 能整除原数 Solution 枚举每个可能的数字和, 进行数位DP即可 , 水爆 Code #include<cstd ...
- 【BZOJ】1799: [Ahoi2009]self 同类分布
[题意]给出a,b,求出[a,b]中各位数字之和能整除原数的数的个数.1 ≤ a ≤ b ≤ 10^18 [算法]数位DP [题解] 感觉这种方法很暴力啊. 枚举数位和1~162(不能枚举0,不然会模 ...
- [BZOJ1799][Ahoi2009]self 同类分布(数位dp)
题目描述 给出两个数 a,ba,b ,求出 [a,b][a,b] 中各位数字之和能整除原数的数的个数. 输入输出格式 输入格式: 一行,两个整数 aa 和 bb 输出格式: 一个整数,表示答案 输入输 ...
- BZOJ1799 [Ahoi2009]self 同类分布[数位DP]
求出[a,b]中各位数字之和能整除原数的数的个数. 有困难的一道题.被迫看了题解:枚举每一个各位数字的和($<=162$),设计状态$f[len][sum][rest]$表示dp后面$len$位 ...
- 【数位dp】bzoj1799: [Ahoi2009]self 同类分布
各种奇怪姿势的数位dp Description 给出a,b,求出[a,b]中各位数字之和能整除原数的数的个数. Sample Input 10 19 Sample Output 3 HINT [约束条 ...
- 【AHOI2009】同类分布 题解(数位DP)
题目大意:求$[l,r]$中各位数之和能被该数整除的数的个数.$0\leq l\leq r\leq 10^{18}$. ------------------------ 显然数位DP. 搜索时记录$p ...
- [BZOJ1799][AHOI2009]同类分布(数位DP)
1799: [Ahoi2009]self 同类分布 Time Limit: 50 Sec Memory Limit: 64 MBSubmit: 1635 Solved: 728[Submit][S ...
随机推荐
- 深入理解C语言-深入理解void
void的字面意思是"无类型",void *则为"无类型指针",void *可以指向任何类型的数据 void含义 void几乎只有注释和限制程序的作用,定义一个 ...
- vue-router在返回时返回到上次滚动位置
参考链接:https://blog.csdn.net/qq_40963664/article/details/79850589
- tar:归档中找不到 tar: 由于前次错误,将以上次的错误状态退出
今天解压ZendStudio-10.0.0-x86.tar.gz,使用命令tar -zxvf ZendStudio-10.0.0-x86.tar.gz ./然后报下面错误tar: /tm: 归档中找不 ...
- linux内核开源代码地址下载
https://www.kernel.org/pub/linux/kernel/v2.6/
- acm java入门(转载)
ACM中java的使用 http://www.cnblogs.com/XBWer/archive/2012/06/24/2560532.html 这里指的java速成,只限于java语法,包括输入输出 ...
- 减2或减3(很搞的贪心)2019牛客国庆集训派对day6
题意:https://ac.nowcoder.com/acm/contest/1111/D 问你先减二x次的情况下,最少减几次3. 思路: %3不为0的要先减2,然后%3为0的要先减大的(比如9 3 ...
- TP5实现自定义抛出异常消息(关闭debug)
重写Handle的render方法,实现自定义异常消息----------------------------------------------------------------------- 首 ...
- MySQL5.7,MySQL8 pfs,sys库使用
MySQL5.7中performance和sys schema中的监控参数解释 在MySQL5.7中,performance schema有很大改进,包括引入大量新加入的监控项.降低占用空间和负载,以 ...
- python线程间通信
#!/usr/bin/python # -*- coding:utf8 -*- from threading import Thread, Lock import random def test_th ...
- 怎样理解 Vue 组件中 data 必须为函数 ?
组件意在 复用 , 若为 对象, 则会相互干扰. 且 Vue 不允许此事发生, 规定必须为函数, 否则报错. 原理如下 对象 // 模拟创建组件 var Component= function() { ...