【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)各出现了多少次. 输入格式 输入文件中 ...
随机推荐
- DEDECMS之八 漏洞错误和疑难杂症
1.dedecms文章加粗b属性后出现strong或者b标签修改 dedecms的文章,如果设置了加粗的属性后,文章标题那会自动添加一个strong或者是b标签,如何去掉呢,方法如下: a.更改自动添 ...
- [转]Linux日志文件总管——logrotate
FROM : https://linux.cn/article-4126-1.html 日志文件包含了关于系统中发生的事件的有用信息,在排障过程中或者系统性能分析时经常被用到.对于忙碌的服务器,日志文 ...
- 金旭亮老师的Scoekt编程摘要
Socket提供了众多的属性,还提供了SetSocketOption方法来设置各种选项,对.NET网络应用程序的数据通讯进行“微调”. Socket的功能出奇地强大,在.NET平台上,它支持以下 ...
- linux查看出口ip 及w3m字符浏览器
Linux 查看服务器出口IP 字符浏览器: http://wiki.ubuntu.org.cn/W3m
- CentOS 7下的 Mysql 主从配置
最近在玩mysql主从配置,在此记录一下 一.前言 1.安装两个虚拟机(CentOS 7).iP分别是192.168.47.131 和192.168.47.133.其中192.168.47.133作为 ...
- WPF路径动画(动态逆向动画)
WPF 中的Path.Data 不再多介绍,M开始坐标点 C弧度坐标点 L 直线坐标点 <Path x:Name="path0" Data="M 10,100 C ...
- PHP 依赖注入,从此不再考虑加载顺序
说这个话题之前先讲一个比较高端的思想--'依赖倒置原则' "依赖倒置是一种软件设计思想,在传统软件中,上层代码依赖于下层代码,当下层代码有所改动时,上层代码也要相应进行改动,因此维护成本较高 ...
- 深入理解计算机系统(2.7)---二进制浮点数,IEEE标准(重要)
2.6我们进行了二进制整数运算的最后一役,本次LZ将和各位一起进入浮点数的世界,这里没有无符号,没有补码,但是有各种各样的惊奇.倘若你真正的进入了浮点数的世界,一定会发现它原来是这么有意思,而不是像之 ...
- /var/spool/clientmqueue 下生成太多文件处理
问题现象: linux操作系统中的/var/spool/clientmqueue/目录下存在大量文件. 原因分析: 系统中有用户开启了cron,而cron中执行的程序有输出内容,输出内容会以邮件形式发 ...
- PHP中生成json信息的方法
<?php //php中生成json信息 //json_encode(数组/对象) $color = array('red','blue','green'); //[索引数组] echo jso ...