[BZOJ1833][ZJOI2010]count 数字计数

试题描述

给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次。

输入

输入文件中仅包含一行两个整数a、b,含义如上所述。

输出

输出文件中包含一行10个整数,分别表示0-9在[a,b]中出现了多少次。

输入示例

 

输出示例

         

数据规模及约定

30%的数据中,a<=b<=10^6;
100%的数据中,a<=b<=10^12。

题解

数位 dp,许多恶心的边界条件需要考虑。

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cctype>
#include <algorithm>
using namespace std;
#define LL long long LL read() {
LL x = 0, f = 1; char c = getchar();
while(!isdigit(c)){ if(c == '-') f = -1; c = getchar(); }
while(isdigit(c)){ x = x * 10 + c - '0'; c = getchar(); }
return x * f;
} #define maxn 20
LL f[maxn][maxn][maxn], ans[maxn], ten[maxn]; void sum(LL x, int fl) {
if(x < 0) return ;
if(!x) ans[0] += fl;
LL tot[maxn], tx = x;
memset(tot, 0, sizeof(tot));
int num[maxn], cnt = 0;
while(x) num[++cnt] = x % 10, x /= 10;
for(int k = 0; k <= 9; k++)
for(int i = 1; i < cnt; i++)
for(int j = (i == 1 ? 0 : 1); j <= 9; j++) tot[k] += f[k][i][j];
// for(int i = 0; i <= 9; i++) printf("%lld%c", tot[i], i < 9 ? ' ' : '\n');
for(int i = cnt; i; i--) {
LL sum = 0;
for(int k = 0; k <= 9; k++)
for(int j = (i == cnt && i > 1 ? 1 : 0); j < num[i]; j++) tot[k] += f[k][i][j];
tot[num[i]] += tx % ten[i-1] + 1;
}
// for(int i = 0; i <= 9; i++) printf("%lld%c", tot[i], i < 9 ? ' ' : '\n');
for(int i = 0; i <= 9; i++) ans[i] += tot[i] * fl;
return ;
} int main() {
ten[0] = 1;
for(int i = 1; i < 13; i++) ten[i] = ten[i-1] * 10;
for(int k = 0; k <= 9; k++) f[k][1][k] = 1;
for(int k = 0; k <= 9; k++)
for(int i = 1; i <= 13; i++)
for(int j = 0; j <= 9; j++) {
// if(k == 1) printf("%d %d %d: %lld\n", k, i, j, f[k][i][j]);
for(int x = 0; x <= 9; x++)
f[k][i+1][x] += f[k][i][j] + (x == k) * ten[i-1];
} LL a = read(), b = read();
sum(b, 1); sum(a - 1, -1);
for(int i = 0; i <= 9; i++) printf("%lld%c", ans[i], i < 9 ? ' ' : '\n'); return 0;
}

做的时候最好用暴力对拍一下。。。

[BZOJ1833][ZJOI2010]count 数字计数的更多相关文章

  1. BZOJ1833 ZJOI2010 count 数字计数 【数位DP】

    BZOJ1833 ZJOI2010 count 数字计数 Description 给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次. Input 输入文件中仅包 ...

  2. bzoj1833: [ZJOI2010]count 数字计数(数位DP+记忆化搜索)

    1833: [ZJOI2010]count 数字计数 题目:传送门 题解: 今天是躲不开各种恶心DP了??? %爆靖大佬啊!!! 据说是数位DP裸题...emmm学吧学吧 感觉记忆化搜索特别强: 定义 ...

  3. [BZOJ1833][ZJOI2010]Count数字计数(DP)

    数位DP学傻了,怎么写最后都写不下去了. 这题严格上来说应该不属于数位DP?只是普通DP加上一些统计上的判断吧. 首先复杂度只与数的位数$\omega$有关,所以怎么挥霍都不会超. f[i][j][k ...

  4. bzoj1833: [ZJOI2010]count 数字计数 数位dp

    bzoj1833 Description 给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次. Input 输入文件中仅包含一行两个整数a.b,含义如上所述. O ...

  5. bzoj1833: [ZJOI2010]count 数字计数 && codevs1359 数字计数

    bzoj1833 codevs1359 这道题也是道数位dp 因为0有前导0这一说卡了很久 最后发现用所有位数减1~9的位数就okay.....orzczl大爷 其他就跟51nod那道统计1出现次数一 ...

  6. [bzoj1833][ZJOI2010]count 数字计数——数位dp

    题目: (传送门)[http://www.lydsy.com/JudgeOnline/problem.php?id=1833] 题解: 第一次接触数位dp,真的是恶心. 首先翻阅了很多很多一维dp,因 ...

  7. BZOJ1833 [ZJOI2010]count 数字计数 【数学 Or 数位dp】

    题目 给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次. 输入格式 输入文件中仅包含一行两个整数a.b,含义如上所述. 输出格式 输出文件中包含一行10个整数, ...

  8. bzoj1833: [ZJOI2010]count 数字计数&&USACO37 Cow Queueing 数数的梦(数位DP)

    难受啊,怎么又遇到我不会的题了(捂脸) 如题,这是一道数位DP,随便找了个博客居然就是我们大YZ的……果然nb,然后就是改改模版++注释就好的了,直接看注释吧,就是用1~B - 1~A-1而已,枚举全 ...

  9. 【数位dp】bzoj1833: [ZJOI2010]count 数字计数

    数位dp姿势一直很差啊:顺便庆祝一下1A Description 给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次. Input 输入文件中仅包含一行两个整数a ...

随机推荐

  1. 手写控件,frame,center和bounds属性

    一.手写控件 1.手写控件的步骤 (1)使用相应的控件类创建控件对象 (2)设置该控件的各种属性 (3)添加控件到视图中 (4)如果是button等控件,还需考虑控件的单击事件等 (5)注意:View ...

  2. IBatis 构建 In语句

    语句 <select id="qryProjectsByIds" parameterClass="Hashtable" resultMap="p ...

  3. Centos7安装Oracle12c

    环境: CentOS7@VMware12,分配资源:CPU:2颗,内存:4GB,硬盘空间:30GB Oracle12C企业版64位 过程纪要: root身份安装依赖包: compat-libstdc+ ...

  4. JSON-LD

    RDF RDF用于信息需要被应用程序处理而不是仅仅显示给人观看的场合.RDF提供了一种用于表达这一信息.并使其能在应用程序间交换而不丧失语义的通用框架.既然是通用框架,应用程序设计者可以利用现成的通用 ...

  5. Hmmer安装与使用

    Hmmer的安装与使用   从功能基因研究的角度来讲,相关的搜索,比如从序列数据库中,找同源的序列,或者对一个对一个新的基因功能进行鉴定,使用hmmer比使用blast有着更高的灵敏度已经更高的搜索速 ...

  6. flask笔记---url、变量规则

    1.路由: route() 装饰器用于把一个函数绑定到一个 URL,可以动态变化 URL 的某些部分,还可以为一个函数指定多个规则,从而方便用户访问与记忆. 例子: @app.route('/') # ...

  7. Django开发web环境搭建的简单方法(CentOS6.5环境)

    这几天跟Linux下的Python + Django环境搭建卯上了.经过几天的琢磨,找到了一条自己认为给力的路径. 这里给出命令行,过程如下: 首次登陆,切换管理员: [web@bogon ~]$ s ...

  8. linq group join

    本篇介绍Linq的Group和Join操作,继续使用<Linq 学习(3) 语法结构>中介绍的数据源. GroupGroup是进行分组操作,同SQL中的Group By类似.原型如下: p ...

  9. PageBase

    namespace Webform.App { public class PageBase : System.Web.UI.Page { } public interface IService< ...

  10. linux标准输入输出及错误输出

    Linux Shell 环境中支持输入输出重定向,用符号"<"和">"来表示. 0.1和2分别表示标准输入.标准输出和标准错误信息输出,可以用来指定 ...