(计数器)NOIP模拟赛(神奇的数位DP题。。)
没有原题传送门。。
手打原题QAQ
【问题描述】
一本书的页数为N,页码从1开始编起,请你求出全部页码中,用了多少个0,1,2,…,9。其中—个页码不含多余的0,如N=1234时第5页不是0005,只是5。
【输入】
一个正整数N(N≤109),表示总的页码。
【输出】
共十行:第k行为数字k-1的个数。
这道题是一道很有意思的DP题。
我们先来看一看这道题目
就是求1~n这么多个数中有多少个X数字。
然后我们来看一看一个例子:
在1~10这10个数中,每个数字(0~9)都在个位数中出现了1次。
在1~100这100个数中,每个数字(0~9)都在十位数中出现了10次。
在1~1000这1000个数中,每个数字(0~9)都在百位数中出现了100次。
以此类推。
所以我们得出了规律
在1~10^n中,数字x在第n-1位中出现了10^n-1次
如求2516数字5出现的次数
首先在2511~2516中,数字5在个位数出现1次;
在1~2510中,数字5在个位数中出现251次
251+1=252;
在1~2500中,数字5在十位数中出现25*10=250次
在1~2000中,数字5在百位数出现了2*100=200次
但是没完!
在2500~2516这么多数中,数字5在百位数还出现了16+1=17次
因为千位数字为2,小于5,所以5不会出现在千位
所以数字5出现的总次数就是252+250+200+17=719次
所以对于任何一个数字X,计算法则如下
计算X在右数第i位出现的次数
则为:
a=X*10^(i-1);
若num[i]>X return a+10^(i-1)即开头全部都为X数字的
若num[i]<X return a;
若num[i]==x return a+num%(10^i)+1;
但是对于任何一个数,0不可能为首位。
所以在计算0只能计算到第n-1位(假设num的位数为n)
然后判断一下就可以搞出来啦!
#include<iostream>
#include<cstdio>
using namespace std;
int qs,n,l;
long long num[];
long long tt[];
long long ans[];
int main(){
freopen("count.in","r",stdin);
freopen("count.out","w",stdout);
scanf("%d",&n);
qs=n;
while(qs){
l++;
num[l]=qs%;
qs/=;
}
tt[]=;
for(int i=;i<=;i++)
tt[i]=tt[i-]*;
qs=n;
for(int i=l;i>=;i--)
{
for(int j=;j<=;j++)
ans[j]+=tt[i-]*num[i]*(i-);
for(int j=;j<num[i];j++)
ans[j]+=tt[i];
ans[num[i]]+=qs%tt[i]+;
}
for(int i=;i<=l;i++)
ans[]-=tt[i];
for(int i=;i<=;i++)
printf("%lld\n",ans[i]);
fclose(stdin);
fclose(stdout);
return ;
}
(计数器)NOIP模拟赛(神奇的数位DP题。。)的更多相关文章
- 2018.08.19 NOIP模拟 number(类数位dp)
Number 题目背景 SOURCE:NOIP2015-SHY-10 题目描述 如果一个数能够表示成两两不同的 3 的幂次的和,就说这个数是好的. 比如 13 是好的,因为 13 = 9 + 3 + ...
- 【NOIP模拟赛】超级树 DP
这个题我在考试的时候把所有的转移都想全了就是新加一个点时有I.不作为II.自己呆着III.连一个IV.连接两个子树中的两个V连接一个子树中的两个,然而V我并不会转移........ 这个题的正解体现了 ...
- 2018.11.07 NOIP模拟 异或(数位dp)
传送门 对于每个二进制位单独考虑贡献. 然后对于两种情况分别统计. 对于第二种要用类似数位dpdpdp的方法来计算贡献. 代码
- 2019.6.1 模拟赛——[ 费用流 ][ 数位DP ][ 计算几何 ]
第一题:http://codeforces.com/contest/1061/problem/E 把点集分成不相交的,然后跑费用流即可.然而错了一个点. #include<cstdio> ...
- [noip模拟赛]某种数列问题<dp>
某种数列问题 (jx.cpp/c/pas) 1000MS 256MB 众所周知,chenzeyu97有无数的妹子(阿掉!>_<),而且他还有很多恶趣味的问题,继上次纠结于一排妹子的排法以 ...
- NOIp模拟赛 巨神兵(状压DP 容斥)
\(Description\) 给定\(n\)个点\(m\)条边的有向图,求有多少个边集的子集,构成的图没有环. \(n\leq17\). \(Solution\) 问题也等价于,用不同的边集构造DA ...
- 模拟赛毒瘤状压DP题:Kronican
Kronican 内存限制:32 MiB 时间限制:2000 ms 标准输入输出 题目类型:传统 评测方式:文本比较 上传者: cqbzgm 题目描述 Mislav有N个无限体积的杯子,每一个杯子中都 ...
- Nescafe #29 NOIP模拟赛
Nescafe #29 NOIP模拟赛 不知道这种题发出来算不算侵权...毕竟有的题在$bz$上是权限题,但是在$vijos$似乎又有原题...如果这算是侵权的话请联系我,我会尽快删除,谢谢~ 今天开 ...
- contesthunter暑假NOIP模拟赛第一场题解
contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...
随机推荐
- python_字符串_常用处理
1. 输出原序列的反向互补序列 in1 = open("brca1.fasta", "r") out1 = open("re_brca1.fasta& ...
- 裸机——SD卡
1.首先要对SD卡有个基础知识 (1) SD = nandflash + 主控IC. 主控IC负责了校验和坏块管理,所以SoC只需要依照时序就可以和SD卡上的主控IC进行数据交换等操作. (2) SD ...
- POJ:2139-Six Degrees of Cowvin Bacon
传送门:http://poj.org/problem?id=2139 Six Degrees of Cowvin Bacon Time Limit: 1000MS Memory Limit: 6553 ...
- 27-Middleware管道介绍
1-Middleware管道介绍,. 如果匹配上/task,则界面只会显示i am task. public void Configure(IApplicationBuilder app, IHost ...
- ABAP CDS - SELECT, association
ABAP CDS - SELECT, association Syntax ... ASSOCIATION [ [min..max] ] TO target [AS _assoc] ON cond_e ...
- 9.1 mysql+centos7+主从复制
MYSQL(mariadb) MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可.开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MySQL闭源的 ...
- P2680 运输计划(二分+树上差分)
P2680 运输计划 链接 分析: 二分+树上差分. 首先可以二分一个答案,那么所有比这个答案大的路径,都需要减去些东西才可以满足这个答案. 那么减去的这条边一定在所有的路径的交集上. 那么如果求快速 ...
- quartz 动态更改执行时间
说明:Quartz + Servlet, 参考国外著名站点的文章:http://stackoverflow.com/questions/12208309/need-to-set-the-quartz- ...
- react书写规范小记
1.对齐方式 //如果没有属性,在自闭和标签前添加一个空格: <Footer /> //如果可以放在一行,放在一行上即可: <Footer bar="bar" / ...
- app分享功能开发
最近在开发一个社交平台的app需要用到分享功能,本来想自己开发的,在网上花了很长时间查了很多教程结果却不尽人意,无意中看到还有类似的开源组件友推,结合自己的开发经验,把一些集成步骤和问题整理成文档奉献 ...