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]数字计数(递推)的更多相关文章

  1. P2602 [ZJOI2010]数字计数&P1239 计数器&P4999 烦人的数学作业

    P2602 [ZJOI2010]数字计数 题解 DFS 恶心的数位DP 对于这道题,我们可以一个数字一个数字的求 也就是分别统计区间 [ L , R ] 内部数字 i 出现的次数 (0<=i&l ...

  2. 数位dp详解&&LG P2602 [ZJOI2010]数字计数

    数位dp,适用于解决一类求x~y之间有多少个符合要求的数或者其他. 例题 题目描述 杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以消除 ...

  3. 洛谷P2602 [ZJOI2010]数字计数 题解 数位DP

    题目链接:https://www.luogu.com.cn/problem/P2602 题目大意: 计算区间 \([L,R]\) 范围内 \(0 \sim 9\) 各出现了多少次? 解题思路: 使用 ...

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

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

  5. P2602 [ZJOI2010]数字计数

    https://www.luogu.org/problemnew/show/P2602 数位dp #include <bits/stdc++.h> using namespace std; ...

  6. Luogu P2602 [ZJOI2010]数字计数

    这算是一道数位DP的入门题了吧虽然对于我来说还是有点烦 经典起手式不讲了吧,\(ans(a,b)\to ans(1,b)-ans(1,a-1)\) 我们首先预处理一个东西,用\(f_i\)表示有\(i ...

  7. 洛谷 P2602 [ZJOI2010]数字计数

    洛谷 第一次找规律A了一道紫题,写篇博客纪念一下. 这题很明显是数位dp,但是身为蒟蒻我不会呀,于是就像分块打表水过去. 数据范围是\(10^{12}\),我就\(10^6\)一百万一百万的打表. 于 ...

  8. [洛谷P2602][ZJOI2010]数字计数

    题目大意:求区间$[l,r]$中数字$0\sim9$出现个数 题解:数位$DP$ 卡点:无 C++ Code: #include <cstdio> #include <iostrea ...

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

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

随机推荐

  1. 【Maven学习】定制库到Maven本地资源库

    目标:手工操作将一个jar安装到本地仓库 第一步:首先获取到jar包,可以是第三方的 也可以是自己创建的,放到本地任意目录 比如:joda-time-2.10.3,放到C:\jar\  目录下面 第二 ...

  2. c# socket 心跳 重连

    /// <summary> /// 检查一个Socket是否可连接 /// </summary> /// <param name="socket"&g ...

  3. 【ARM-Linux开发】【CUDA开发】NVIDIA Jetson TX2 进阶:QtCreator安装

    Here we have a short article on installing Qt Creator on the NVIDIA Jetson TX1. Looky here: Note: Th ...

  4. spark 提交任务报错 Yarn application has already ended! It might have been killed or unable to launch application master

    1.任务是提交在yarn上的,查看 resourceManager页面 有如下信息 Current usage: 58.4 MB of 1 GB physical memory used; 2.2 G ...

  5. 【转】pdf文件自动切白边

    pdf文件自动剪裁(自动切白边) FROM:http://www.ai7.org/wp/html/754.html 可能用到的环境.工具:Ubuntu 10.04+TeXLive 2008+pdfcr ...

  6. SQL Server 中的窗口函数(2012 新函数)

    简介 SQL Server 2012之后对窗口函数进行了极大的加强,但对于很多开发人员来说,对窗口函数却不甚了解,导致了这样强大的功能被浪费,因此本篇文章主要谈一谈SQL Server中窗口函数的概念 ...

  7. Flutter 增加三方库卡在flutter package get 的解决办法

    修改 pubspec.yaml 文件增加第三方库之后,AndroidStudio 像往常一样提示 需要 package get. 然后一直卡在 Running "flutter packag ...

  8. pytest_使用自定义标记mark

    前言 pytest可以支持自定义标记,自定义标记可以把一个web项目划分多个模块,然后指定模块名称执行.app自动化的时候,如果想android和ios公用一套代码时,也可以使用标记功能,标明哪些是i ...

  9. Spring Security的RBAC数据模型嵌入

    1.简介 ​ 基于角色的权限访问控制(Role-Based Access Control)作为传统访问控制(自主访问,强制访问)的有前景的代替受到广泛的关注.在RBAC中,权限与角色相关联,用户通过成 ...

  10. 使用Nginx的X-Accel-Redirect实现大文件下载

    在实现文件下载功能时通常有以下几种方式: 1.直接给出下载地址,例如http://****.com/test/test.rar,这种是最直接的方式,任何人都可以下载,无法控制用户的权限. 2.验证权限 ...