(计数器)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& ...
随机推荐
- C语言数组篇(一)一维数组
0. 数组的两种表现形式 一种是常见的a[10]; //初学者常用 另一种是用指针表示的数组. //实际工程使用.常用于参数传递 ...
- Apache服务配置
Apache 1.安装Apache服务 第1步:把光盘设备中的系统镜像挂载到/media/cdrom目录. [root@zhangjh ~]# mkdir -p /media/cdrom/ [root ...
- 利用js实现倒计时
倒计时 这个名词并不陌生,比如:天猫,京东等一些网上商城都会推出一些限时特价商品,今天我们就一起编写一个属于自己的倒计时: Ps: 首先做一件事情的时候,不应该盲目的去做,应该首当其冲的去想,脑子里面 ...
- TopCoder SRM 710 Div2 Hard MinMaxMax Floyd最短路变形
题意: 有一个无向连通图,没有重边没有自环,并给出顶点的权值和边的权值 定义一条路径\(difficulty\)值为该路径上最大的点权乘上最大的边权 定义函数\(d(i,j)\)为\(i,j\)之间的 ...
- Java从后台重定向(redirect)到另一个项目的方法
(1)通过ModelAndView跳转 @RequestMapping("alipayforward") public ModelAndView alipayforward(Htt ...
- 【转】Android 添加系统服务
Android系统本身提供了很多系统服务,如WindowManagerService,PowerManagerService等.下面描述一下添加一个系统服务的具体步骤. 1. 撰写一个aidl文件, ...
- FTP被动模式服务器端开有限的端口
很多服务器上都搭建的有FTP服务,FTP服务有两种连接模式:主动模式和被动模式.关于这两种模式的介绍,请参考这篇文章:重温FTP的主动模式和被动模式 关于这两种模式的比较,原文有这样的描述: 主动模式 ...
- APPIUM-----自动发现兼容的Chromedrivers
使用Appium Desired Capabilities:chromedriverExecutableDir chromeDriver所有版本下载路径:https://chromedriver.st ...
- appium 多个设备同时执行
测试需要同时在多个android设备上运行,就需要启动多个appium 使用adb命令获取udid,命令:adb get-serialno 使用的是testng测试框架,代码使用java编写 第一台, ...
- python selenium 练习 自动获取豆瓣阅读当前特价书籍 chrome 元素定位 窗口切换 元素过期
豆瓣原创电子书每周推出数十本限时免费数目,一周免费期过后恢复原价.想着豆瓣原创书中有不少值得一看,便写了个脚本,免去一个个添加的烦恼. 使用了Windows下selenium+Python的组合,有较 ...