洛谷P4127同类分布

我们要在dfs的板子里记录哪些量呢?当前填的所有数的和sum?当前填的数构成的数值all?
sum可以留下,数值就扔掉叭。数值最大是1e18,要是留下,在g数组里有一维的大小是1e18。也许可以通过特殊方式使chen_zhe把空间上限放到你能存下。手动滑稽
那么为了我们的空间够用,怎么办呢?
上面不记录数值是因为它太大了,那我们能不能让它取模?
当然可以了,不过是对什么取模呢?1e9+7?显然不行,因为l,r<=1e18,产生重复的太多了
大质数?万一你填出来的数是取模数-1那也凉凉。
我们再考虑一下怎么判断sum能整除填出来的数。sum%mo==all%mo?理论上可行,but我们不能确定模数,所以待定
那如果我们枚举填出来的数字之和mo,使其成为模数,则只需判断sum是否等于mo即可。
然后代码就有了
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<queue>
#include<cstring>
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
const int inf=214748364;
const ll mod=1000000007;
inline ll read()
{
char ch=getchar();
ll x=0;bool f=0;
while(ch<'0'||ch>'9')
{
if(ch=='-')f=1;
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
x=(x<<1)+(x<<3)+(ch^48);
ch=getchar();
}
return f?-x:x;
}
ll l,r;
ll g[20][172][172],li[20];
int t,mo;
void make(ll k)
{
t=0;
while(k)
{
li[++t]=k%10;
k/=10;
}
}
ll dfs(int now,int sum,int all,int mo,bool lim)
{
if(!now) return (!all)&&(sum==mo);
if(!lim&&g[now][sum][all]!=-1) return g[now][sum][all];
int up=lim?li[now]:9;
ll rtn=0;
for(int i=0;i<=up;i++)
{
rtn+=dfs(now-1,sum+i,(all*10+i)%mo,mo,lim&&(i==up));
}
if(!lim) g[now][sum][all]=rtn;
return rtn;
}
int main()
{
ll ans=0;
l=read();
r=read();
make(r);
for( mo=1;mo<=9*t;mo++)
memset(g,-1,sizeof(g)),ans+=dfs(t,0,0,mo,1);
make(l-1);
ll qwq=0;
for( mo=1;mo<=9*t;mo++)
{
memset(g,-1,sizeof(g));
qwq+=dfs(t,0,0,mo,1); }
ans-=qwq;
printf("%lld",ans);
}
洛谷P4127同类分布的更多相关文章
- bzoj1799(洛谷4127)同类分布(月之谜)
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1799 https://www.luogu.org/problemnew/show/P4127 ...
- 洛谷 P4127 [AHOI2009]同类分布 解题报告
P4127 [AHOI2009]同类分布 题目描述 给出两个数\(a,b\),求出\([a,b]\)中各位数字之和能整除原数的数的个数. 说明 对于所有的数据,\(1 ≤ a ≤ b ≤ 10^{18 ...
- 洛谷 P4127 [AHOI2009]同类分布
题意简述 求l~r之间各位数字之和能整除原数的数的个数. 题解思路 数位DP 代码 #include <cstdio> #include <cstring> typedef l ...
- 洛谷P4127
Description 给出两个数 \(a\),\(b\) ,求出 \([a,b]\) 中各位数字之和能整除原数的数的个数 Solution 设 \(f[i][j][k][q]\) 表示 枚举到第 i ...
- P4127 [AHOI2009]同类分布
P4127 [AHOI2009]同类分布 题解 好的,敲上数位DP DFS板子 记录一下填的各位数字之和 sum ,然后记录一下原数 yuan 最后判断一下 yuan%sum==0 不就好啦??? ...
- 【BZOJ1799】[AHOI2009]同类分布(动态规划)
[BZOJ1799][AHOI2009]同类分布(动态规划) 题面 BZOJ 洛谷 题解 很容易想到数位\(dp\),然而数字和整除原数似乎不好记录.没关系,直接枚举数字和就好了,这样子就可以把整除原 ...
- 洛谷P2024 食物链
挺神奇 题目描述 动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形.A 吃 B,B 吃 C,C 吃 A. 现有 N 个动物,以 1 - N 编号.每个动物都是 A,B,C 中的一种 ...
- 洛谷OJ P1196 银河英雄传说(带权并查集)
题目描述 公元五八○一年,地球居民迁移至金牛座α第二行星,在那里发表银河联邦 创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银河系的两大军事集团在巴米利恩星域爆发战争.泰山 ...
- [洛谷P1196][NOI2002]银河英雄传说 - 带偏移量的并查集(1)
Description 公元五八〇一年,地球居民迁至金牛座α第二行星,在那里发表银河联邦创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银河系的两大军事集团在巴米利恩星域爆发 ...
随机推荐
- iOS APP 国际化
pp Store 中很多流行的应用程序有多种语言版本.虽然这些应用程序可能因为很多因素而变得流行,但是具有多种本地化版本,肯定是其中一个因素.越多的人可以理解并使用您的应用程序,潜在的买家也就越多. ...
- python 模块发布及使用
将模块(此处名为nester)写好后,与setup.py放入同一个文件夹中: //setup.py from distutils.core import setup setup( name=" ...
- Docker下载镜像并创建容器运行
在linux系统中安装完成docker后,我们开始进行docker的镜像.容器的使用. 在使用docker时,首先要明确的两个概念:image(镜像) 与 container (容器) image: ...
- 自然语言处理资源NLP
转自:https://github.com/andrewt3000/DL4NLP Deep Learning for NLP resources State of the art resources ...
- PHP 图片合成、仿微信群头像
PHP 图片合成.仿微信群头像 参考文章: 作者:凯歌~,php图片合成方法(多张图片合成一张). 经过测试,略作调整和注释,感谢分享. 欢迎提出改善优化意见! 示例代码: /** * 合成图片 * ...
- c调用c++
g++ main.c math.cpp math.h中加入extern "C"
- GUI学习之十八——QDateTimeEdit学习总结
在前面两章我们总结了QSpinBox和QDoubleSpinBox的用法,今天来总结一下QDateTimeEdit控件的基本用法 一.描述 1.QDateTimeEdit是一个用来编辑日期和时间的单行 ...
- Ubuntu安装SFTP服务,及启动失败处理
安装openssh-server sudo apt-get install openssh-server 查看是否安装成功 dpkg --get-selections | grep ssh 新建用户组 ...
- bzoj3091 城市旅行 LCT + 区间合并
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=3091 题解 调了整个晚自习才调出来的问题. 乍一看是个 LCT 板子题. 再看一眼还是个 LC ...
- Django【第22篇】:基于Ajax实现的登录
基于ajax实现的登录 一.需要知道的新知识点 1.刷新验证码.给src属性加一个?号.加个?会重新去请求 //#给验证码刷新 $(".vialdCode_img").click( ...