【BZOJ-1833】count数字计数 数位DP
1833: [ZJOI2010]count 数字计数
Time Limit: 3 Sec Memory Limit: 64 MB
Submit:
2494 Solved: 1101
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
Sample Output
20
HINT
30%的数据中,a<=b<=10^6;
100%的数据中,a<=b<=10^12。
Source
Solution
裸的数位DP,但其实并不是特别的水
首先F[i][j][k]表示位数为i的最高位为j的k种数的个数
按照十进制拆分,预处理后统计答案
Code
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
long long L,R;
long long F[][][],ans1[],ans2[];
void prework()
{
for (int i=; i<=; i++) F[][i][i]=;
long long tmp=;
for (int i=; i<=; i++)
{
tmp*=;
F[i][][]=F[i-][][]*+F[i-][][]+tmp;
for (int j=; j<=; j++)
F[i][][j]=F[i-][][j]*+F[i-][j][j];
for (int j=; j<=; j++)
{
F[i][j][]=F[i-][][]*+F[i-][][];
for (int k=; k<=; k++)
if (j==k)
F[i][j][k]=F[i-][][k]*+F[i-][k][k]+tmp;
else
F[i][j][k]=F[i-][][k]*+F[i-][k][k];
}
}
}
long long cf(int x)
{
long long re=;
for (int i=; i<x; i++)
re*=;
return re;
}
void Calc(long long x,long long *ans)
{
int digit[]={},len=; long long y=x;
while (x) {digit[++len]=x%; x/=;}
for (int i=; i<len; i++)
for (int j=; j<=; j++)
for (int k=; k<=; k++)
ans[k]+=F[i][j][k];
for (int i=len; i>=; i--)
{
for (int j=; j<=digit[i]-; j++)
{
if (i==len && j==) continue;
for (int k=; k<=; k++) ans[k]+=F[i][j][k];
}
ans[digit[i]]+=y%cf(i)+;
}
}
int main()
{
prework();
scanf("%lld%lld",&L,&R);
Calc(L-,ans1); Calc(R,ans2);
printf("%lld",ans2[]-ans1[]);
for (int i=; i<=; i++) printf(" %lld",ans2[i]-ans1[i]);
return ;
}
自己一开始YY的出错了..
【BZOJ-1833】count数字计数 数位DP的更多相关文章
- UVA.1640.The Counting Problem / BZOJ.1833.[ZJOI2010]数字计数(数位DP)
题目链接 \(Description\) 求\([l,r]\)中\(0,1,\cdots,9\)每个数字出现的次数(十进制表示). \(Solution\) 对每位分别DP.注意考虑前导0: 在最后统 ...
- bzoj1833: [ZJOI2010]count 数字计数(数位DP+记忆化搜索)
1833: [ZJOI2010]count 数字计数 题目:传送门 题解: 今天是躲不开各种恶心DP了??? %爆靖大佬啊!!! 据说是数位DP裸题...emmm学吧学吧 感觉记忆化搜索特别强: 定义 ...
- 1833: [ZJOI2010]count 数字计数——数位dp
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1833 省选之前来切一道裸的数位dp.. 题意 统计[a,b]中0~9每个数字出现的次数(不算 ...
- [bzoj1833][ZJOI2010]count 数字计数——数位dp
题目: (传送门)[http://www.lydsy.com/JudgeOnline/problem.php?id=1833] 题解: 第一次接触数位dp,真的是恶心. 首先翻阅了很多很多一维dp,因 ...
- bzoj1833: [ZJOI2010]count 数字计数 数位dp
bzoj1833 Description 给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次. Input 输入文件中仅包含一行两个整数a.b,含义如上所述. O ...
- BZOJ 1833 count 数字计数
sb数位dp. #include<iostream> #include<cstdio> #include<cstring> #include<algorith ...
- BZOJ 1833 ZJOI2010 count 数字计数 数位DP
题目大意:求[a,b]间全部的整数中0~9每一个数字出现了几次 令f[i]为i位数(算前导零)中每一个数出现的次数(一定是同样的,所以仅仅记录一个即可了) 有f[i]=f[i-1]*10+10^(i- ...
- BZOJ 1833 数字计数 数位DP
题目链接 做的第一道数位DP题,听说是最基础的模板题,但还是花了好长时间才写出来..... 想深入了解下数位DP的请点这里 先设dp数组dp[i][j][k]表示数位是i,以j开头的数k出现的次数 有 ...
- 【题解】P2602 数字计数 - 数位dp
P2602 [ZJOI2010]数字计数 题目描述 给定两个正整数 \(a\) 和 \(b\) ,求在 \([a,b]\) 中的所有整数中,每个数码(digit)各出现了多少次. 输入格式 输入文件中 ...
随机推荐
- 处理OSX创建的U盘, 删除EFI分区
1. 运行 diskpart 2. list disk 3. 根据列出的硬盘, select disk [编号] 4. clean 5. exit 然后再创建分区和格式化
- datepicker monthpicker
- CSS3 动画效果带来的bug
css3 动画效果比如transition:all 2s linear;这种用来计算及时的物体坐标的话会带来一定的问题 比如把一个DIV从A点移动到B点.JS为DIV.style.left=B; 但是 ...
- C#并行编程中的Parallel.Invoke
一.基础知识 并行编程:并行编程是指软件开发的代码,它能在同一时间执行多个计算任务,提高执行效率和性能一种编程方式,属于多线程编程范畴.所以我们在设计过程中一般会将很多任务划分成若干个互相独立子任务, ...
- MFC添加背景图片
1.在资源里导入一个bmp图片假设名称为IDB_BITMAP1 实现OnPaint方法 CPaintDC dc(this); CRect rect; GetClientRect(&rect); ...
- 自己存档:table 的css
border:0;margin:0;border-collapse:collapse;border-spacing:0;
- js的数组
转载:http://blog.163.com/sammer_rui/blog/static/846200442010717900634/ https://developer.mozilla.org/z ...
- 学习Google Protocol buffer之概述
XML这种属于非常强大的一种格式,能存储任何你想存的数据,而且编辑起来还是比较方便的.致命的缺陷在于比较庞大,在某些情况下,序列化和解析都会成为瓶颈.这种对于实时性很强的应用来说,就不太适合了,想象下 ...
- SD卡状态广播
SD状态发生改变的时候会对外发送广播.SD卡的状态一般有挂载.未挂载和无SD卡. 清单文件 一个广播接受者可以接受多条广播.这里在意图过滤器中添加是data属性是因为广播也需要进行匹配的.对方发送的广 ...
- js简易函数性能测试器
如果你不想用浏览器的js性能测试工具,可以用下面这个简单的函数测试一下(1毫秒一下的就测不出来了) function testFn(fn,param){ var start = new Date(). ...