【题解】P2602[JZOI2010]数字计数
【题解】[P2602ZJOI2010]数字计数
乍看此题,感觉直接从数字的位上面动手,感觉应该很容易。
但是仔细看数据范围,发现如果不利用计数原理,肯定会超时,考虑数码出现的特征:
\(A000\)到\(A999\),四位数中的\(A\)总共出现了\(999-0+1\)次。假设\(A\)在第\(k\)位上,那么它出现了\(10^{k-1}\)次。记录一下这个的前缀和。特别注意的是, 由\(dp(i)\rightarrow dp(i+1)\)时,要\(dp(i+1)=10dp(i)+10^{i-1}\),这是考虑到在第\(i+1\)位上增加一位会给\(i\)位带来\([0,9]\)总共10的贡献。那么\(A\)出现的次数就被我们确定了。
显然对于\(A233\)这样的数字,我们不能直接调用前面我们预处理的数组,因为它的值域是在\([233,995]\)的,而非\([000,999]\)。其实这样也好办,\(A\)出现的次数直接就是\(233-000+1=233+1\)。最后对于\(A\)特殊处理即可。
然后我们从处理四位数到了处理三位数了。就是一个一样的子问题。
#include<bits/stdc++.h>
using namespace std;
#define RP(t,a,b) for(register int t=(a),edd=(b);t<=edd;++t)
#define DRP(t,a,b) for(register int t=(a),edd=(b);t>=edd;--t)
#define ERP(t,a) for(register int t=head[a];t;t=e[t].nx)
#define Max(a,b) ((a)<(b)?(b):(a))
#define Min(a,b) ((a)<(b)?(a):(b))
#define midd register int mid=(l+r)>>1
#define TMP template < class ccf >
typedef long long ll;
#define endl '\n'
#define spc ' '
#define int ll
TMP inline ccf qr(ccf b){
char c=getchar();
int q=1;
ccf x=0;
while(c<48||c>57)
q=c==45?-1:q,c=getchar();
while(c>=48&&c<=57)
x=x*10+c-48,c=getchar();
return q==-1?-x:x;
}
const int maxn=15;
ll F,T;
int cntf,cntt;
int ans[maxn];
int ans2[maxn];
int num[maxn];
ll dp[maxn]={0,1};
ll ten[maxn]={1};
inline void dfs(int* d,ll data){
register int cnt=0;
while(data)
num[++cnt]=data%10,data/=10;
DRP(t,cnt,1){
RP(i,0,9)
d[i]+=dp[t-1]*num[t];
RP(i,0,num[t]-1)
d[i]+=ten[t-1];
register ll temp=0;
DRP(i,t-1,1)
temp=temp*10LL+num[i];
d[num[t]]+=temp+1;d[0]-=ten[t-1];
}
}
signed main(){
#ifndef ONLINE_JUDGE
freopen("in.in","r",stdin);
freopen("out.out","w",stdout);
#endif
ten[1]=10;
RP(t,2,14)
ten[t]=ten[t-1]*10ll,dp[t]=dp[t-1]*10ll+ten[t-1];
F=qr(1ll);
T=qr(1ll);
dfs(ans,T);
dfs(ans2,F-1LL);
RP(t,0,9)
cout<<ans[t]-ans2[t]<<spc;
cout<<endl;
return 0;
}
【题解】P2602[JZOI2010]数字计数的更多相关文章
- 洛谷P2602 [ZJOI2010]数字计数 题解 数位DP
题目链接:https://www.luogu.com.cn/problem/P2602 题目大意: 计算区间 \([L,R]\) 范围内 \(0 \sim 9\) 各出现了多少次? 解题思路: 使用 ...
- P2602 [ZJOI2010]数字计数&P1239 计数器&P4999 烦人的数学作业
P2602 [ZJOI2010]数字计数 题解 DFS 恶心的数位DP 对于这道题,我们可以一个数字一个数字的求 也就是分别统计区间 [ L , R ] 内部数字 i 出现的次数 (0<=i&l ...
- P2602 [ZJOI2010]数字计数(递推)
P2602 [ZJOI2010]数字计数 思路: 首先考虑含有前导0的情况,可以发现在相同的\(i\)位数中,每个数的出现次数都是相等的.所以我们可以设\(f(i)\)为\(i\)位数每个数的出现次数 ...
- 数位dp详解&&LG P2602 [ZJOI2010]数字计数
数位dp,适用于解决一类求x~y之间有多少个符合要求的数或者其他. 例题 题目描述 杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以消除 ...
- 洛谷P2602 [ZJOI2010]数字计数(数位dp)
数字计数 题目传送门 解题思路 用\(dp[i][j][k]\)来表示长度为\(i\)且以\(j\)为开头的数里\(k\)出现的次数. 则转移方程式为:\(dp[i][j][k] += \sum_{t ...
- 洛谷P2602 [ZJOI2010]数字计数 题解
题目描述 输入格式 输出格式 输入输出样例 输入样例 1 99 输出样例 9 20 20 20 20 20 20 20 20 20 说明/提示 数据规模与约定 分析 很裸的一道数位DP的板子 定义f[ ...
- [洛谷P2602][ZJOI2010]数字计数
题目大意:求区间$[l,r]$中数字$0\sim9$出现个数 题解:数位$DP$ 卡点:无 C++ Code: #include <cstdio> #include <iostrea ...
- Luogu P2602 [ZJOI2010]数字计数 数位DP
很久以前就...但是一直咕咕咕 思路:数位$DP$ 提交:1次 题解:见代码 #include<cstdio> #include<iostream> #include<c ...
- P2602 [ZJOI2010]数字计数
https://www.luogu.org/problemnew/show/P2602 数位dp #include <bits/stdc++.h> using namespace std; ...
随机推荐
- 原生js获取元素的样式信息
工作中经常会需要获取DOM元素的样式,之前都是通过jquery的css()方法,现在总结一下通过原生js获取元素样式的方法. obj.style js var _width = obj.style.w ...
- Android图片突出
概述 今天有个群友问 Android 图片凸出 效果怎么弄,早以前有过类似的需求,整个项目的提示框都是一个背景,背景上方有凸出半张图片,所以用layer-list写了一个背景来实现. 思路 随便画了一 ...
- PHP+MySQL按时间段查询记录代码
代码如下: <?php //搜索 $StarLevel = $_GET["starlevel"]; $StartDate=$_GET["StartDate" ...
- cordova 中de.sitewaerts.cordova.documentviewer 插件 看pdf图片缩略图与实际图片不一致
//if (document == nil) // Unarchive failed so create a new ReaderDocument object //{ document = [[Re ...
- SilverLight.3-Validation:一、银光验证。ValidatesOnExpression和NotifyOnValidationError
ylbtech-SilverLight-DataBindings_BindingADataObjects_Validation:一.银光验证.ValidatesOnExpression和NotifyO ...
- 2017.2.20 activiti实战--第二章--搭建Activiti开发环境及简单示例(二)简单示例
学习资料:<Activiti实战> 第一章 搭建Activiti开发环境及简单示例 2.5 简单流程图及其执行过程 (1)leave.bpmn 后缀名必须是bpmn.安装了activiti ...
- MYSQL索引优化思维导图
有关索引的优化.MYSQL索引优化 文章来源:刘俊涛的博客 地址:http://www.cnblogs.com/lovebing
- 管理voting disks
管理voting disks 一.关于voting disk 的一些必需要知道的东西: 11g 曾经我们能够使用dd 命令来备份voting disk ,可是在11g 以后 oracle 不再支 ...
- vscode 编译调试c/c++的环境配置
首先看了一下别人写的文章 http://blog.csdn.net/c_duoduo/article/details/51615381 在按照上文链接博主的安装步骤进行到MINGW的安装时出现一个问题 ...
- iOS中 扫描二维码/生成二维码具体解释 韩俊强的博客
近期大家总是问我有没有关于二维码的demo,为了满足大家的需求,特此研究了一番,希望能帮到大家! 每日更新关注:http://weibo.com/hanjunqiang 新浪微博 指示根视图: se ...