洛谷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$啦!(撒花). 因为这次我们需要的 ...
随机推荐
- 在SELECT DISTINCT 状况下使用 Order BY Newid() 随机数选出记录
在日常作业中,有时候可能是一些活动要抽出得奖人或选出抽查的一些名单, 就常常会使用到 Order BY Newid() 的方式来做随机数选出, 但有可能的状况需是要搭配到 DISTINCT 来选出,这 ...
- 如何使用Web Service新建和更新Wiki页面的内容
公司内部有很多部门都创建了Wiki库,来做知识共享.公司是Hosting的SharePoint环境,不能写服务器端代码,要操作Wiki只能通过Web Service来完成,所以,碰到两个情况: 1)W ...
- Nginx 访问控制
根据 IP 限制访问: location /admin/ { allow 192.168.1.1; allow 192.168.1.2; deny all; } 根据正则限制访问: location ...
- 系统日志:/var/log/messages
/var/log/messages 存放的是系统的日志信息,它记录了各种事件,基本上什么应用都能往里写日志,在做故障诊断时可以首先查看该文件内容 [root@mirh5_center1_111.231 ...
- 邮件服务器日志:/var/log/maillog
/var/log/maillog会记录包含系统上运行的邮件服务器的日志信息,比如记录 postfix 或 sendmail 运行时的日志信息 [root@localhost ~]# tail /var ...
- 【LeetCode OJ】Longest Palindromic Substring
题目链接:https://leetcode.com/problems/longest-palindromic-substring/ 题目:Given a string S, find the long ...
- Android Studio 无法预览xml布局视图的解决办法
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/lvyoujt/article/details/73283762 提示:failed to load ...
- IOS多线程之线程属性的配置
版权声明:原创作品,谢绝转载!否则将追究法律责任. 设置线程堆栈的大小: 系统为每个你新创建的线程,都会为你的进程空间分配一定的内存作为该线程的堆栈.这里面有我们局部变量声明我们的方法就是一个堆栈 ...
- CSS - 移动端 常见小bug整理与解决方法总结【更新中】
常见问题总结与整理系列~ 1. border一像素在手机上看着有点粗的问题: 原理是因为:1px在手机上是使用2dp进行渲染的.换成 border: 0.5像素?是不行的! 解决方法: 把border ...
- [转]F5负载均衡算法及基本原理
原文:Intro to Load Balancing for Developers – The Algorithms 转载:http://blog.gesha.net/archives/205/ p ...