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 ...
随机推荐
- 零基础C#网站开发实战教学(全套)最新更新2019-12-16。。。
这是林枫山自己编写制作的全套Visual Studio 2013 C# 网站开发案例实战教学教程,欢迎下载学习. 下载目录链接如下(如果链接下载不了,请加QQ:714259796获取教程): 网站界面 ...
- 通过excel表格分析学生成绩
题目要求: 分析文件’课程成绩.xlsx’,至少要完成内容:分析1)每年不同班级平均成绩情况.2)不同年份总体平均成绩情况.3)不同性别学生成绩情况,并分别用合适的图表展示出三个内容的分析结果. 废话 ...
- 基于FPGA Manager的Zynq PL程序写入方案
本文主要描述了如何在Linux系统启动以后,在线将bitstream文件更新到ZYNQ PL的过程及方法.相关内容主要译自xilinx-wiki,其中官网给出了两种方法,分别为Device Tree ...
- Tcl语言学习--基础知识
一.脚本.命令和单词符号 一个TCL脚本可以包含一个或多个命令.命令之间必须用换行符或分号隔开. 1.关键字/变量 变量是程序的基础变量组成:变量名.变量值变量名要求:任何字符串都可以作为变量名,区分 ...
- 怎么删除json 键值对
var obj = { 'id': 1, 'name': 2 } delete obj.id delete obj['id'] console.log(obj) //{ 'name': 2 }
- matlab界面UI设计资料
一个实现图像灰度处理并归类于某已知相似图片的程序 软件:matlab2017a 算法:HU检索图像算法.Zernike算法 资料: ①: matlab遍历文件夹下所有图片和遍历所有子文件夹下图片 - ...
- [cf 585 E] Marbles
(一道Div2E不会,我太难了) 题意: 给你一个长度为$n$的颜色序列$A$,每次操作可以选择两个相邻元素交换,求把序列交换成“相同颜色挨在一起”所需的最少操作数. 按颜色排序:设颜色$col$在序 ...
- Json schema前奏 关于JSON
目录 1. 何为 JSON 2. JSON 基本语法 3. JSON值的类型 4. 与XML比较 5. 辅助工具 1. 何为 JSON JSON( JavaScript Object Notation ...
- 【已解决】ArcMap的界面如何恢复默认设置
解决方案:在C盘内搜索“Normal.mxt”,将它删除,然后重启ArcMap,即可. 效果图:
- 华为交换机配置Telnet步骤
通过Telnet方式登录交换机进行设备查询管理为各网络管理员提供了便利,不需要成天拎着console线夹着笔记本蹲在机房里,只要在能连接到相应网络的电脑上Telnet连接即可. 前提条件是该交换机已经 ...