题目链接

\(Description\)

求\([l,r]\)中\(0,1,\cdots,9\)每个数字出现的次数(十进制表示)。

\(Solution\)

对每位分别DP。注意考虑前导0: 在最后统计时,把0的答案减掉对应位的即可,在第\(i\)位的前导0会产生额外的\(10^{i-1}\)个答案。

#include <cstdio>
#include <cstring>
#include <algorithm> int Ans[10],A[10],f[10][10],pw[10];
bool vis[10][10]; int DFS(int pos,int cnt,bool lim,int K)
{
if(!pos) return cnt;
if(!lim && vis[pos][cnt]) return f[pos][cnt];
int up=lim?A[pos]:9, res=0;
for(int i=0; i<=up; ++i)
res+=DFS(pos-1,cnt+(i==K),i==up&&lim,K);
if(!lim) vis[pos][cnt]=1,f[pos][cnt]=res;
return res;
} int main()
{
pw[0]=1;
for(int i=1; i<=8; ++i) pw[i]=pw[i-1]*10;
int l,r;
while(scanf("%d%d",&l,&r),l&&r)
{
if(l>r) std::swap(l,r);
for(A[0]=0; r; r/=10) A[++A[0]]=r%10;
for(int i=0; i<=9; ++i)//每个数答案都是不同的。。别忘清空。
memset(vis,0,sizeof vis), Ans[i]=DFS(A[0],0,1,i);
int bit=A[0]; for(A[0]=0,--l; l; l/=10) A[++A[0]]=l%10;
for(int i=0; i<=9; ++i)
memset(vis,0,sizeof vis), Ans[i]-=DFS(A[0],0,1,i);
while(bit!=A[0]) Ans[0]-=pw[--bit];
for(int i=0; i<9; ++i) printf("%d ",Ans[i]);
printf("%d\n",Ans[9]);
}
return 0;
}

数字计数:

//824kb	52ms
//被longlong坑。。
#include <cstdio>
#include <cstring>
#include <algorithm>
typedef long long LL; LL Ans[13],A[13],f[13][13],pw[13];
bool vis[13][13]; LL DFS(int pos,LL cnt,bool lim,int K)
{
if(!pos) return cnt;
if(!lim && vis[pos][cnt]) return f[pos][cnt];
int up=lim?A[pos]:9; LL res=0;
for(int i=0; i<=up; ++i)
res+=DFS(pos-1,cnt+(i==K),i==up&&lim,K);
if(!lim) vis[pos][cnt]=1,f[pos][cnt]=res;
return res;
} int main()
{
pw[0]=1;
for(int i=1; i<=12; ++i) pw[i]=pw[i-1]*10ll;
LL l,r;
scanf("%lld%lld",&l,&r);
if(l>r) std::swap(l,r);
for(A[0]=0; r; r/=10) A[++A[0]]=r%10;
for(int i=0; i<=9; ++i)//每个数答案都是不同的。。别忘清空。
memset(vis,0,sizeof vis), Ans[i]=DFS(A[0],0,1,i);
int bit=A[0]; for(A[0]=0,--l; l; l/=10) A[++A[0]]=l%10;
for(int i=0; i<=9; ++i)
memset(vis,0,sizeof vis), Ans[i]-=DFS(A[0],0,1,i);
while(bit!=A[0]) Ans[0]-=pw[--bit];
for(int i=0; i<9; ++i) printf("%lld ",Ans[i]);
printf("%lld",Ans[9]); return 0;
}

UVA.1640.The Counting Problem / BZOJ.1833.[ZJOI2010]数字计数(数位DP)的更多相关文章

  1. [ZJOI2010]数字计数 数位DP

    最近在写DP,今天把最近写的都放上来好了,,, 题意:给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次. 首先询问的是一个区间,显然是要分别求出1 ~ r ,1 ...

  2. [luogu2602 ZJOI2010] 数字计数 (数位dp)

    传送门 Description 给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次. Input 输入文件中仅包含一行两个整数a.b,含义如上所述. Output ...

  3. Luogu P2602 [ZJOI2010]数字计数 数位DP

    很久以前就...但是一直咕咕咕 思路:数位$DP$ 提交:1次 题解:见代码 #include<cstdio> #include<iostream> #include<c ...

  4. 洛谷P2602 [ZJOI2010]数字计数(数位dp)

    数字计数 题目传送门 解题思路 用\(dp[i][j][k]\)来表示长度为\(i\)且以\(j\)为开头的数里\(k\)出现的次数. 则转移方程式为:\(dp[i][j][k] += \sum_{t ...

  5. UVA 1640 The Counting Problem UVA1640 求[a,b]或者[b,a]区间内0~9在里面各个数的数位上出现的总次数。

    /** 题目:UVA 1640 The Counting Problem UVA1640 链接:https://vjudge.net/problem/UVA-1640 题意:求[a,b]或者[b,a] ...

  6. UVA 1640 The Counting Problem

    https://vjudge.net/problem/UVA-1640 题意:统计区间[l,r]中0——9的出现次数 数位DP 注意删除前导0 #include<cmath> #inclu ...

  7. 1833: [ZJOI2010]count 数字计数——数位dp

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1833 省选之前来切一道裸的数位dp.. 题意 统计[a,b]中0~9每个数字出现的次数(不算 ...

  8. bzoj1833: [ZJOI2010]count 数字计数 数位dp

    bzoj1833 Description 给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次. Input 输入文件中仅包含一行两个整数a.b,含义如上所述. O ...

  9. [bzoj1833][ZJOI2010]count 数字计数——数位dp

    题目: (传送门)[http://www.lydsy.com/JudgeOnline/problem.php?id=1833] 题解: 第一次接触数位dp,真的是恶心. 首先翻阅了很多很多一维dp,因 ...

随机推荐

  1. 鸟哥的Linux私房菜——第十五章:正规表示法

    视频链接 B站:http://www.bilibili.com/video/av10364761/ 目录如下 1. 前言:2. 基础正规表示法:2.1 以 grep 撷取字符串 (grep -iv   ...

  2. spring cloud微服务架构 服务提供者和服务消费者

    服务提供者和服务消费者 下面这张表格,简单描述了服务提供者/消费者是什么:   | 名词 | 概念 | | ----- | ----------------------- | | 服务提供者 | 服务 ...

  3. linux系统root密码忘了怎么办 三种方法快速找回root密码

    linux root密码找回方法一 第1步:在系统进入单用户状态,直接用passwd root去更改. 第2步:用安装光盘引导系统,进行linux rescue状态,将原来/分区挂接上来,作法如下: ...

  4. 实现vue2.0响应式的基本思路

    最近看了vue2.0源码关于响应式的实现,以下博文将通过简单的代码还原vue2.0关于响应式的实现思路. 注意,这里只是实现思路的还原,对于里面各种细节的实现,比如说数组里面数据的操作的监听,以及对象 ...

  5. Java 在匿名内部函数中为外部函数变量赋值的解决方案

    Java匿名内部函数本人不怎么主动使用,但是经常会调用一些API,其中会调用一些接口,而这些接口是需要使用匿名内部类来实现的,于是就遇到了一些问题. 就比如okHttp3 的接口调用 OkHttpCl ...

  6. Linux命令(六)Linux超级用户和管理组

    修改文件目录的所属组

  7. ant+sonar+jacoco代码质量代码覆盖率扫描

    使用ant构建的java web项目如何做sonar代码质量扫描?以下就是实际遇到并成功使用的案例一.做sonar扫描的准备工作    1.给web项目增加build.xml构建脚本.    2.下载 ...

  8. CTEX windedt 打开中文tex乱码问题

    % !TEX encoding = System % !TEX program = pdflatex % !TEX encoding = System% !TEX program = pdflatex ...

  9. python 多进程的启动和代码执行顺序

    对照着廖雪峰的网站学习Python遇到些问题: 在进程中,父进程创建子进程时发现,显示不是按照顺序显示,疑问? 参照代码如下: from multiprocessing import Pool imp ...

  10. 高可用的MongoDB集群【转】

    刚接触MongoDB,就要用到它的集群,只能硬着头皮短时间去看文档和尝试自行搭建.迁移历史数据更是让人恼火,近100G的数据文件,导入.清理垃圾数据执行的速度蜗牛一样的慢.趁着这个时间,把这几天关于M ...