没有原题传送门。。

手打原题QAQ

【问题描述】

    一本书的页数为N,页码从1开始编起,请你求出全部页码中,用了多少个012,…,9。其中—个页码不含多余的0,如N1234时第5页不是0005,只是5

【输入】

       一个正整数N(N109),表示总的页码。

【输出】

       共十行:第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题。。)的更多相关文章

  1. 2018.08.19 NOIP模拟 number(类数位dp)

    Number 题目背景 SOURCE:NOIP2015-SHY-10 题目描述 如果一个数能够表示成两两不同的 3 的幂次的和,就说这个数是好的. 比如 13 是好的,因为 13 = 9 + 3 + ...

  2. 【NOIP模拟赛】超级树 DP

    这个题我在考试的时候把所有的转移都想全了就是新加一个点时有I.不作为II.自己呆着III.连一个IV.连接两个子树中的两个V连接一个子树中的两个,然而V我并不会转移........ 这个题的正解体现了 ...

  3. 2018.11.07 NOIP模拟 异或(数位dp)

    传送门 对于每个二进制位单独考虑贡献. 然后对于两种情况分别统计. 对于第二种要用类似数位dpdpdp的方法来计算贡献. 代码

  4. 2019.6.1 模拟赛——[ 费用流 ][ 数位DP ][ 计算几何 ]

    第一题:http://codeforces.com/contest/1061/problem/E 把点集分成不相交的,然后跑费用流即可.然而错了一个点. #include<cstdio> ...

  5. [noip模拟赛]某种数列问题<dp>

    某种数列问题  (jx.cpp/c/pas) 1000MS 256MB 众所周知,chenzeyu97有无数的妹子(阿掉!>_<),而且他还有很多恶趣味的问题,继上次纠结于一排妹子的排法以 ...

  6. NOIp模拟赛 巨神兵(状压DP 容斥)

    \(Description\) 给定\(n\)个点\(m\)条边的有向图,求有多少个边集的子集,构成的图没有环. \(n\leq17\). \(Solution\) 问题也等价于,用不同的边集构造DA ...

  7. 模拟赛毒瘤状压DP题:Kronican

    Kronican 内存限制:32 MiB 时间限制:2000 ms 标准输入输出 题目类型:传统 评测方式:文本比较 上传者: cqbzgm 题目描述 Mislav有N个无限体积的杯子,每一个杯子中都 ...

  8. Nescafe #29 NOIP模拟赛

    Nescafe #29 NOIP模拟赛 不知道这种题发出来算不算侵权...毕竟有的题在$bz$上是权限题,但是在$vijos$似乎又有原题...如果这算是侵权的话请联系我,我会尽快删除,谢谢~ 今天开 ...

  9. contesthunter暑假NOIP模拟赛第一场题解

    contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...

随机推荐

  1. B-树 分合之道

    P.s:在代码里会同时用到向量和B-树的search,insert, remove,具体调用的是哪个结构的函数结合上下文就能看懂. 根据上一篇文章,我们对于这棵树的大致结构已经明了,那该如何有效利用并 ...

  2. 队列--数据结构与算法JavaScript描述(5)

    队列 Queue 概念 队列是一种列表,但队列只能在队尾插入元,在队首删除元素. 队列是一种先进先出的数据结构,用于存储按顺序排列的数据,被用在很多地方,比如提交操作系统执行的一系列进程.打印任务池等 ...

  3. 笔记-scrapy-深入学习-sheduler

    笔记-scrapy-深入学习-sheduler 1.      scheduler.py source code:scrapy/core/scheduler.py: 1.1.    初始化的开始 在分 ...

  4. Oozie是什么

    Apache Oozie Workflow Scheduler for Hadoop Oozie is a workflow scheduler system to manage Apache Had ...

  5. JS:关于JS字面量及其容易忽略的12个小问题

    简要 问题1:不能使用typeof判断一个null对象的数据类型 问题2:用双等号判断两个一样的变量,可能返回false 问题3:对于非十进制,如果超出了数值范围,则会报错 问题4:JS浮点数并不精确 ...

  6. Android自定义组件之简单组合

    Android自定义控件有两种,一种是组合.比如一个linearlayout 里面有textview,imageview. 这样的好处是,写一个就可以多处使用. view_image_and_butt ...

  7. bootstrap重新设计按钮样式

    1.将btn的样式换成以下的样式 2.思路: (1)将原来的btn样式设置color:#FFF,同时text-shadow设置,这样原来的btn样式就会变淡了,后面再加上新的样式就可以覆盖掉 注意:要 ...

  8. 快速登录机器&数据库

    本文来自网易云社区. 作者:盛国存 背景 我们日常在使用ApiDoc维护管理api文档,提高了api文档的整体维护性.但在老旧接口中,补充接口注解无疑是一次繁重的体力劳动.仔细查看,大多数接口的格式 ...

  9. Python调用Webservice

    使用Python调用webservice 推荐使用 suds包 该包一般在Python2.x   python3各种麻烦 略过 实例 import suds # webservice url url ...

  10. python 多版本的兼容

    1.针对linux版本 linux版本的话,首先调用whereis python 来获取到多版本的路径. root@Ulord-14:~# whereis pythonpython: /usr/bin ...