P2602 [ZJOI2010]数字计数(递推)
P2602 [ZJOI2010]数字计数
思路:
首先考虑含有前导0的情况,可以发现在相同的\(i\)位数中,每个数的出现次数都是相等的。所以我们可以设\(f(i)\)为\(i\)位数每个数的出现次数。
那么就有递推方程:\(f(i)=f(i-1)*10+10^{i-1}\)。
假设现在要求的数为\(x\)位,那么我们依次从\(x\)位往下面求就行了。假设第\(x\)位的数字为\(k\),那么我们枚举第一位从\(0\)到\(k\),每一个数字的出现次数加上\(f(i-1)*k+10^{i-1}\),同时\(k\)这个数还会有多出现的情况,计算一下就行了。就这样一位一位来算就ok了。
因为我们之前没有考虑前导0的情况,所以我们减去多算上的情况就行了。
代码如下:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 15;
ll f[N], cnta[N], cntb[N], pow10[N];
ll a, b;
int tot;
ll num[N] ;
void solve(ll x, ll *cnt) {
    tot = 0;
    ll tmp = x;
    while(x) {
        num[++tot] = x % 10;
        x /= 10;
    }
    for(int i = tot; i >= 1; i--) {
        for(int j = 0; j < 10; j++) cnt[j] += num[i] * f[i - 1] ;
        for(int j = 0; j < num[i]; j++) cnt[j] += pow10[i - 1] ;
        tmp -= num[i] * pow10[i - 1] ;
        cnt[num[i]] += tmp + 1;
        cnt[0] -= pow10[i - 1] ;
    }
}
int main() {
    pow10[0] = 1;
    ll t = 0;
    for(int i = 1; i < N; i++) {
        f[i] = f[i - 1] * 10 + pow10[i - 1] ;
        pow10[i] = pow10[i - 1] * 10;
    }
    cin >> a >> b;
    solve(a - 1, cnta) ;
    solve(b, cntb) ;
    for(int i = 0; i < 10; i++) cout << cntb[i] - cnta[i] << ' ';
    return 0;
}
P2602 [ZJOI2010]数字计数(递推)的更多相关文章
- P2602 [ZJOI2010]数字计数&P1239 计数器&P4999 烦人的数学作业
		P2602 [ZJOI2010]数字计数 题解 DFS 恶心的数位DP 对于这道题,我们可以一个数字一个数字的求 也就是分别统计区间 [ L , R ] 内部数字 i 出现的次数 (0<=i&l ... 
- 数位dp详解&&LG P2602 [ZJOI2010]数字计数
		数位dp,适用于解决一类求x~y之间有多少个符合要求的数或者其他. 例题 题目描述 杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以消除 ... 
- 洛谷P2602 [ZJOI2010]数字计数 题解 数位DP
		题目链接:https://www.luogu.com.cn/problem/P2602 题目大意: 计算区间 \([L,R]\) 范围内 \(0 \sim 9\) 各出现了多少次? 解题思路: 使用 ... 
- 洛谷P2602 [ZJOI2010]数字计数(数位dp)
		数字计数 题目传送门 解题思路 用\(dp[i][j][k]\)来表示长度为\(i\)且以\(j\)为开头的数里\(k\)出现的次数. 则转移方程式为:\(dp[i][j][k] += \sum_{t ... 
- P2602 [ZJOI2010]数字计数
		https://www.luogu.org/problemnew/show/P2602 数位dp #include <bits/stdc++.h> using namespace std; ... 
- Luogu  P2602 [ZJOI2010]数字计数
		这算是一道数位DP的入门题了吧虽然对于我来说还是有点烦 经典起手式不讲了吧,\(ans(a,b)\to ans(1,b)-ans(1,a-1)\) 我们首先预处理一个东西,用\(f_i\)表示有\(i ... 
- 洛谷 P2602 [ZJOI2010]数字计数
		洛谷 第一次找规律A了一道紫题,写篇博客纪念一下. 这题很明显是数位dp,但是身为蒟蒻我不会呀,于是就像分块打表水过去. 数据范围是\(10^{12}\),我就\(10^6\)一百万一百万的打表. 于 ... 
- [洛谷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 ... 
随机推荐
- js:对象之间的复制
			1.:复制obj1,不管obj2是否有这个属性,但是ojb2中的特有属性会保留 var obj1={id:1,name:'zhangsan'} var obj2={}; for (var prop i ... 
- ghostscript之pdf处理
			ghostscript安装: yum install ghostscript 使用: #把tmp目录下的a.pdf压缩成b.pdf gs -sDEVICE=pdfwrite -dPDFSETTINGS ... 
- C#  web项目乱码问题解决
			在 web.config 文件中添加代码 <globalization requestEncoding="GB2312" responseEncoding="GB ... 
- Redis 的主从复制(Master/Slave)
			目录 1. 是什么 2. 能干嘛 3. Redis主从复制讲解 (1). info replication:查看 目标redis 主从情况 (2) . 配从库不配主库 (3). 常用策略 (4). 复 ... 
- firewall详解
			官方文档介绍地址:https: //access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Security_Gui ... 
- JS系列:数据类型详细讲解
			ctrl+B加粗 ### 数据类型: - 1.number数字类型 NaN:not a number 不是一个数 ,但他是数字类型 isNaN:检测当前值是否不是有效数字,返回true代表不是有效数字 ... 
- day25——私有成员、类方法、静态方法、属性、isinstance和issubclass的区别
			day25 类的私有成员 当你遇到重要的数据,功能(只允许本类使用的一些方法,数据)设置成私有成员 python所有的私有成员都是纸老虎,形同虚设 类从加载时,只要遇到类中的私有成员,都会在私有成员前 ... 
- tkinter中Partial Function Example
			from functools import partial as pto from tkinter import Tk, Button, X from tkinter.messagebox impor ... 
- Linux基础(03)gdb调试
			1. 安装GDB增强工具 (gef) * GDB的版本大于7.7 * wget -q -O- https://github.com/hugsy/gef/raw/master/scripts/gef.s ... 
- Drool7s kmodule的作用--系列02课
			本文是介绍drool7s kmodule. 一.为什么komdule.xml文件一定要放在resources下的META-INF文件夹中 --->直接看源码吧,请看下图,应该都知道为什么要放在固 ... 
