洛谷 P2602 [ZJOI2010]数字计数
第一次找规律A了一道紫题,写篇博客纪念一下。
这题很明显是数位dp,但是身为蒟蒻我不会呀,于是就像分块打表水过去。
数据范围是\(10^{12}\),我就\(10^6\)一百万一百万的打表。
于是我就发现了一些规律。
先献给大家一个打表程序吧~
#include <bits/stdc++.h>
using namespace std;
int main()
{
long long l,r,cnt[10]={};
for (long long t=0;t<=999999;++t) {
l=t*1000000+1;
r=(t+1)*1000000;
for (long long i=l;i<=r;++i) {
long long n=i;
while (n) ++cnt[n%10],n/=10;
}
for (long long i=0;i<=9;++i) cout<<cnt[i]<<' ';
cout<<endl;
}
return 0;
}
这是1~1000000,1000001~2000000,2000001~3000000……的表。
也看一下吧。
488895 600001 600000 600000 600000 600000 600000 600000 600000 600000
1088895 2200000 1200001 1200000 1200000 1200000 1200000 1200000 1200000 1200000
1688895 2800000 2800000 1800001 1800000 1800000 1800000 1800000 1800000 1800000
2288895 3400000 3400000 3400000 2400001 2400000 2400000 2400000 2400000 2400000
2888895 4000000 4000000 4000000 4000000 3000001 3000000 3000000 3000000 3000000
3488895 4600000 4600000 4600000 4600000 4600000 3600001 3600000 3600000 3600000
4088895 5200000 5200000 5200000 5200000 5200000 5200000 4200001 4200000 4200000
4688895 5800000 5800000 5800000 5800000 5800000 5800000 5800000 4800001 4800000
5288895 6400000 6400000 6400000 6400000 6400000 6400000 6400000 6400000 5400001
5888896 7000001 7000000 7000000 7000000 7000000 7000000 7000000 7000000 7000000
7488895 8600002 7600000 7600000 7600000 7600000 7600000 7600000 7600000 7600000
8088895 11200001 8200001 8200000 8200000 8200000 8200000 8200000 8200000 8200000
8688895 12800001 9800000 8800001 8800000 8800000 8800000 8800000 8800000 8800000
这时候你会发现两个规律:
- 每隔一百万,各个数字都会增加600000个,很神奇。
- 对于当前的数字i,如果\(\frac{i}{10^k}>0(5<k<13)\),那么\(cnt[(\frac{i}{10^k})~\texttt{mod}~10]+=1000000\)。
有了这两大规律,我们就可以轻松处理出\(10^{12}\)的大数据了。
复杂度约为\(O(\frac{r-l+1}{1000000})\)
代码在下面:
#include <bits/stdc++.h>
using namespace std;
int main()
{
long long a[10]={};
long long l,r;cin>>l>>r;
while (l<r&&l%1000000) {
long long t=l;
while (t) ++a[t%10],t/=10;
++l;
}
while (r>l&&r%1000000) {
long long t=r;
while (t) ++a[t%10],t/=10;
--r;
}
while (l!=r) {
for (int i=0;i<10;++i)
a[i]+=600000;
long long t=1000000;
while (l/t&&t<=1000000000000) {
a[l/t%10]+=1000000;
t*=10;
}
l+=1000000;
}
while (r) ++a[r%10],r/=10;
for (int i=0;i<10;++i) cout<<a[i]<<' ';
return 0;
}
洛谷 P2602 [ZJOI2010]数字计数的更多相关文章
- 洛谷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]数字计数
题目大意:求区间$[l,r]$中数字$0\sim9$出现个数 题解:数位$DP$ 卡点:无 C++ Code: #include <cstdio> #include <iostrea ...
- 洛谷P2602 [ZJOI2010]数字计数 题解
题目描述 输入格式 输出格式 输入输出样例 输入样例 1 99 输出样例 9 20 20 20 20 20 20 20 20 20 说明/提示 数据规模与约定 分析 很裸的一道数位DP的板子 定义f[ ...
- 洛谷P2602 [ZJOI2010] 数字计数 (数位DP)
白嫖的一道省选题...... 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 usin ...
- BZOJ1833或洛谷2602 [ZJOI2010]数字计数
BZOJ原题链接 洛谷原题链接 又是套记搜模板的时候.. 对\(0\sim 9\)单独统计. 定义\(f[pos][sum]\),即枚举到第\(pos\)位,前面枚举的所有位上是当前要统计的数的个数之 ...
- 【洛谷P2602】数字计数
题目大意:求 [a,b] 中 0-9 分别出现了多少次. 题解:看数据范围应该是一个数位dp. 在 dfs 框架中维护当前的位置和到当前位置一共出现了多少个 \(x,x\in [0,9]\).因此,用 ...
- P2602 [ZJOI2010]数字计数(递推)
P2602 [ZJOI2010]数字计数 思路: 首先考虑含有前导0的情况,可以发现在相同的\(i\)位数中,每个数的出现次数都是相等的.所以我们可以设\(f(i)\)为\(i\)位数每个数的出现次数 ...
- P2602 [ZJOI2010]数字计数&P1239 计数器&P4999 烦人的数学作业
P2602 [ZJOI2010]数字计数 题解 DFS 恶心的数位DP 对于这道题,我们可以一个数字一个数字的求 也就是分别统计区间 [ L , R ] 内部数字 i 出现的次数 (0<=i&l ...
随机推荐
- openstack中nova组件Hypervisors、Floating_ips的全部python API 汇总
感谢朋友支持本博客,欢迎共同探讨交流,因为能力和时间有限.错误之处在所难免,欢迎指正! 假设转载.请保留作者信息. 博客地址:http://blog.csdn.net/qq_21398167 原博文地 ...
- 重载 CreateParams 方法[2]: 重载 TForm.CreateParams 方法的几个例子
这里有所有相关参数的解释: http://www.cnblogs.com/del/archive/2008/04/15/1154359.html //最大化窗口 procedure TForm1.Cr ...
- CSS使用学习总结
尽量少使用类,因为可以层叠识别,如: .News h3而不必在h3上加类 <div class=”News”> <h3></h3> <h2></h ...
- C/C++ 控制台演示彩色输出进度
#include <stdio.h> #include <windows.h> BOOL SetConsoleColor(WORD wAttributes); int main ...
- [转]ASP.NET MVC 5 -从控制器访问数据模型
在本节中,您将创建一个新的MoviesController类,并在这个Controller类里编写代码来取得电影数据,并使用视图模板将数据展示在浏览器里. 在开始下一步前,先Build一下应用程序(生 ...
- Java程序员职业规划
Java 程序员职业规划 无论你是学习了 Java 即将进入企业工作,还是已经踏入了工作岗位的程序员.但是面对层出不穷的新技术,激增的就业压力,不断分化的开发角色,再加上 IT 发展的不明确,做出职业 ...
- Messages: java.lang.NullPointerExceptionFile: org/apache/jsp/test_jsp.javaLine number: 23
Messages: java.lang.NullPointerExceptionFile: org/apache/jsp/test_jsp.javaLine number: 23 . . . Caus ...
- POJ 1946 Cow Cycling(抽象背包, 多阶段DP)
Description The cow bicycling team consists of N (1 <= N <= 20) cyclists. They wish to determi ...
- C# string.Format("{0:C3}", 2)
- [SQL]躺着也中枪的datetime类型
写在前面 本来这个东西,我是不想在这里总结的,今天有初学者的朋友问我了,那就不得不说说了,你肯定也踩过这样的坑,没遇到,说明你运气好,编码习惯好.那还是言归正传吧.避免你中枪,还是扫一眼这篇文章吧. ...