洛谷P2602 数字计数 [ZJOI2010] 数位dp
正解:数位dp
解题报告:
打算在寒假把学长发过题解的题目都做辣然后把不会的知识点都落实辣! ⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄
然后这道题,开始想到的时候其实想到的是大模拟,就有点像之前考试贪心专题里的这题一样
但是仔细一看发现大模拟做得可能太复杂辣,,,讨论有点儿多,但是肯定是讨论得出来的辣想想看省选的时候大力讨论一波就有100pts岂不美哉!
但是反正今天是不会港模拟的解法dei,,,这里港的是数位dp的方法
首先很容易想到的是,数位dp套路来说,它既然是要求[l,r],那就显然是[1,r]-[1,l-1]呐是趴
然后就考虑,设f[i][j]:有i位时第j个数字有几个
首先像个最基础的,不管前导0的影响
显然的是在不管前导0的影响的情况下所有数字的f[i]都是相等的,也就是说能直接删去一维j,变为f[i]:有i位时每个数字有几个.
那转移也很好想鸭,就是f[i]=f[i-1]*10+10i-1.
转移挺好理解的我就随便解释下
首先不管在前面加什么数都有f[i-1]的贡献,前面加的数可以是[0,9]有10种,所以是f[i-1]*10
但还要考虑的是前面加的是j(我知道j这一维已经删了,,但是不好表示,就强行让它出场下QAQ),那就是最高位已经定了,后面还有i-1位可以随便填数,就是10i-1(后面的贡献已经在f[i-1]*10中计入辣)
(话说我jio得这个就是个小学奥数,,,我居然罗里吧嗦解释了这——么多,,,看来确实越来越菜了鸭呜呜呜
(*这里很重要吼,后面的完善其实都是用的这里的思想,刚好一个用了f[i-1]*10的解释一个用了10i-1的解释
然后进一步完善,依然不管前导0,但是考虑到有上限,怎么搞?
那就从高位往低位计算
举个eg趴,ABCD
从高往低想,先是A000,那不考虑最高位,每个数字出现次数就是A*f[3],然后最高位能出现小于等于A的数字,每个数字都能出现103次,然后A000就处理完辣(其实和我之前推的那个转移式的原理是一样的嘛
(嗷对了关于最高位的计算,,,A的那个要特判一下吼!因为显然你只能取到ABCD,就是说你只有BCD次没有1000次!
然后对于B00,C0和D,都是一样的套路鸭,然后就又变成递推式辣484!
最后只要考虑一下前导0怎么除掉呐
认真想一下,前导0的情况显然是前面一串连续的0嘛,然后就一位一位地算呐,其实仔细思考一下,依然是我第一步推的那个式子中的关于10i-1的解释,你想下吼,一样是规定了最高位,一样是后面随便走,那不就是一样的求法嘛,于是假如要求的右边界有n位,这n位都可以是0嘛,于是就是10n-1+10n-2+10n-3+...+100
做完辣!完结撒fafa!
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define rg register
#define rp(i,x,y) for(rg ll i=x;i<=y;++i)
#define my(i,x,y) for(rg ll i=x;i>=y;--i)
;
ll x,y,f[N]={,},power[N]={,},l[N],r[N],num[N];
inline ll read()
{
rg ;rg ;
'))ch=getchar();
;
)+(x<<)+(ch^'),ch=getchar();
return y?x:-x;
}
inline void solv(rg ll x[],rg ll y)
{
rg ll cnt=;,y/=;
my(i,cnt,)
{
rp(j,,)x[j]+=f[i-]*num[i];
rp(j,,num[i]-)x[j]+=power[i-];
rg ll tmp=;my(j,i-,)tmp=tmp*+num[j];x[num[i]]+=tmp+;x[]-=power[i-];
}
}
int main()
{x=read();y=read();rp(i,,)power[i]=power[i-]*,f[i]=f[i-]*+power[i-];solv(l,x-);solv(r,y);rp(i,,)printf(;}
注意要开longlong,,,QAQ
昂对了这题还有记搜/打表找规律/小学数学/二维dp/三维dp等多种方法,,,我暂时不想写辣QAQ就先放下链接指个路QAQ
(最后说一句吼,,,这题和我说的考试里那题挺像的,所以既然这题能用数位dp显然那题也行,还记得sol里出题人港他开始想的解法就是数位dp嘛
所以极大可能我等下会写下那题的数位dp解法!
dbq好像咕辣,,,
洛谷P2602 数字计数 [ZJOI2010] 数位dp的更多相关文章
- 洛谷 - P2602 - 数字计数 - 数位dp
https://www.luogu.org/problemnew/show/P2602 第二道数位dp,因为“数位dp都是模板题”(误),所以是从第一道的基础上面改的. 核心思想就是分类讨论,分不同情 ...
- 【Luogu】P2602数字计数(数位DP)
题目链接 数位DP好喵啊.自己yy两个小时的dfs:题解40行代码=10WA:10A. md而且还不是完全理解题解是什么意思. 所以放题解链接. #include<cstdio> #inc ...
- 洛谷$P$2518 计数 $[HAOI2010]$ 数位$dp$
正解:数位$dp$ 解题报告: 传送门$w$ 感觉省选的数位$dp$还是比较有质量的辣,,,至少有一定的思维难度是趴$QwQ$ 这题要考虑到一个,我认为比较关键的点,就,对于一个位数不满的数,可以理解 ...
- BZOJ_1833_[ZJOI2010]count 数字计数_数位DP
BZOJ_1833_[ZJOI2010]count 数字计数_数位DP 题意: 给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次. 分析: 数位DP f[i][ ...
- 洛谷P2602 [ZJOI2010]数字计数 题解 数位DP
题目链接:https://www.luogu.com.cn/problem/P2602 题目大意: 计算区间 \([L,R]\) 范围内 \(0 \sim 9\) 各出现了多少次? 解题思路: 使用 ...
- 【洛谷】2602: [ZJOI2010]数字计数【数位DP】
P2602 [ZJOI2010]数字计数 题目描述 给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次. 输入输出格式 输入格式: 输入文件中仅包含一行两个整数a ...
- BZOJ_1833_[ZJOI2010]_数字计数_(数位dp)
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1833 统计\(a~b\)中数字\(0,1,2,...,9\)分别出现了多少次. 分析 数位dp ...
- BZOJ1833 ZJOI2010 count 数字计数 【数位DP】
BZOJ1833 ZJOI2010 count 数字计数 Description 给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次. Input 输入文件中仅包 ...
- LuoguP2602 [ZJOI2010]数字计数【数位dp】By cellur925
题目传送门 题目大意:给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次. 继续数位dp=w=. 这一次我们不需要记录$pre$啦!(撒花). 因为这次我们需要的 ...
随机推荐
- python --help查询python相关命令
C:\Users\lenovo>python --help usage: python [option] ... [-c cmd | -m mod | file | -] [arg] ... O ...
- 系统日志:/var/log/messages
/var/log/messages 存放的是系统的日志信息,它记录了各种事件,基本上什么应用都能往里写日志,在做故障诊断时可以首先查看该文件内容 [root@mirh5_center1_111.231 ...
- Lua 迭代器与closure
所谓“迭代器”就是一种可以遍历(iterate over)一种极和中所有元素的机制.在Lua中,通常将迭代其表示为函数.每调用一次函数,即返回集合中的“下一个”元素.每个迭代器都需要在每次成功调用之间 ...
- xp下对dinput8.dll 游戏键盘输入的模拟 非函数hook
https://www.xuebuyuan.com/833929.html 很多游戏或者3d模拟软件为了更好的支持外设使用directinput作为输入接口调用.那么如果要模拟鼠标或键盘来控制游戏或者 ...
- 树莓派3安装opencv2程序无法运行
在raspberry pi3 上安装opencv3已测试,没有问题,而opencv2报错如下: Xlib: extension "RANDR" missing on display ...
- 《征服C指针》读书笔记
本文同时发布在我的个人博客上,欢迎访问~ www.seekingdream.cn 在读完K&R之后,对C的认识就是指针.数组.网上的人们对指针也有些“敬而远之”的感觉.最近从同学处淘得< ...
- android基础---->WidGet的使用
Widget是一个可以添加在别的应用程序中的”小部件”,我们可以使用自定义的Widget远程控制我们的程序做一些事情.一般用于在桌面上添加一个小部件,现在我们开始小部件的学习. 目录导航: WidGe ...
- 本版本延续MVC中的统一验证机制~续的这篇文章,本篇主要是对验证基类的扩展和改善(转)
本版本延续MVC中的统一验证机制~续的这篇文章,本篇主要是对验证基类的扩展和改善 namespace Web.Mvc.Extensions { #region 验证基类 /// <summary ...
- 题目1448:Legal or Not(有向无环图判断——拓扑排序问题)
题目链接:http://ac.jobdu.com/problem.php?pid=1448 详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus 参考代码: ...
- 题目1162:I Wanna Go Home(最短路径问题进阶dijkstra算法))
题目链接:http://ac.jobdu.com/problem.php?pid=1162 详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus 参考代码: ...