[BZOJ 1833] 数字计数
Link:
Solution:
比较明显的数位DP
先预处理出1~9和包括前导0的0的个数:$pre[i]=pre[i-1]*10+10^{digit-1}$
(可以分为首位和其它位来考虑问题)
求$(L,R)$的个数,可以用$(1,R)-(1,L-1)$差分来做
在求$(1,K)$时,我们先根据预处理的值算出$[0,999....99]$的值(不受边界影响)
接下来从最高位开始尽可能增加$10^n$,直到达到边界后再开始增加$10^{n-1}$
每次对于前面已确定的部分暴力算,而后面不确定的、可任意取值的直接用$pre[i]$统计
Code:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll res[],pre[]; void split(ll x,ll pos){while(x) res[x%]+=pos,x/=;}
void Digital_DP(ll x,int flag)
{
int i,j;ll pos=,now;
for(i=;pos<x;i++)//对[0,99..99]进行统计
{
for(j=;j<=;j++)
res[j]+=pre[i-]**flag;
for(j=;j<=;j++)
res[j]+=pos/*flag;
pos*=;
} now=pos/=;i--;
while(now<x)
{
while(now+pos<=x)
{
ll temp=now/pos;
split(temp,pos*flag);//对已确定部分的暴力统计
for(j=;j<=;j++)//对可任意取值部分的统一计算
res[j]+=pre[i]*flag;
now+=pos;
}
pos/=;i--;
}
}
int main()
{
int i;ll a,b,pos=;
pre[]=;
for(i=;i<=;i++)
pre[i]=pre[i-]*+pos,pos*=; cin >> a >> b;
Digital_DP(b+,);Digital_DP(a,-);
for(i=;i<=;i++) cout << res[i] << " ";
}
Review:
1、对于所有i位中每个数字出现次数的预处理要积累:
$pre[i]=pre[i-1]*10+10^{digit-1}$
2、数位统计中的区间问题,考虑差分,都化为$(1,K)$的形式进行求解
3、数位DP中,特殊处理边界;数字出现次数,特殊处理前导0
[BZOJ 1833] 数字计数的更多相关文章
- BZOJ 1833 数字计数 数位DP
题目链接 做的第一道数位DP题,听说是最基础的模板题,但还是花了好长时间才写出来..... 想深入了解下数位DP的请点这里 先设dp数组dp[i][j][k]表示数位是i,以j开头的数k出现的次数 有 ...
- BZOJ 1833: [ZJOI2010]count 数字计数( dp )
dp(i, j, k)表示共i位, 最高位是j, 数字k出现次数. 预处理出来. 差分答案, 对于0~x的答案, 从低位到高位进行讨论 -------------------------------- ...
- 【BZOJ】【1833】【ZJOI2010】count 数字计数
数位DP Orz iwtwiioi 学习了一下用记忆化搜索来捉题的新姿势……但没学会TAT,再挖个坑(妈蛋难道对我来说数位DP就是个神坑吗……sigh) //BZOJ 1833 #include< ...
- [BZOJ 1833] [ZJOI2010] count 数字计数 【数位DP】
题目链接:BZOJ - 1833 题目分析 数位DP .. 用 f[i][j][k] 表示第 i 位是 j 的 i 位数共有多少个数码 k . 然后差分询问...Get()中注意一下,如果固定了第 i ...
- UVA.1640.The Counting Problem / BZOJ.1833.[ZJOI2010]数字计数(数位DP)
题目链接 \(Description\) 求\([l,r]\)中\(0,1,\cdots,9\)每个数字出现的次数(十进制表示). \(Solution\) 对每位分别DP.注意考虑前导0: 在最后统 ...
- BZOJ 1833 【ZJOI2010】 数字计数
题目链接:数字计数 没啥好说的,裸裸的数位\(dp\). 先枚举当前是算数字\(x\)出现的次数,设\(f_{i,j}\)表示从高位往低位\(dp\),\(dp\)完了前\(i\)位之后\(x\)出现 ...
- 1833: [ZJOI2010]count 数字计数
1833: [ZJOI2010]count 数字计数 Time Limit: 3 Sec Memory Limit: 64 MBSubmit: 2951 Solved: 1307[Submit][ ...
- 【BZOJ-1833】count数字计数 数位DP
1833: [ZJOI2010]count 数字计数 Time Limit: 3 Sec Memory Limit: 64 MBSubmit: 2494 Solved: 1101[Submit][ ...
- BZOJ_1833_[ZJOI2010]_数字计数_(数位dp)
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1833 统计\(a~b\)中数字\(0,1,2,...,9\)分别出现了多少次. 分析 数位dp ...
随机推荐
- Cube 找规律
这道题我们经过简单的推测便可得知3个之前特判,四个之后就成为了一般状况,就是我们每侧都是走整个整个的|_|之后零的走|||. 考试的时候包括平时做题,许多正确的感性比理性证明要强得多. #includ ...
- codeforces902C. Hashing Trees
https://codeforces.com/contest/902/problem/C 题意: 给你树的深度和树的每个节点的深度,问你是否有重构,如果有重构输出两个不同的结构 题解: 如果相邻节点的 ...
- 公共css
* { margin: 0; padding: 0; word-break: break-all; font-family: Microsoft YaHei, tahoma, arial, Hirag ...
- 编写一个 Chrome 浏览器扩展程序
浏览器扩展允许我们编写程序来实现对浏览器元素(书签.导航等)以及对网页元素的交互, 甚至从 web 服务器获取数据,以 Chrome 浏览器扩展为例,扩展文件包括: 一个manifest文件(主文件, ...
- Java中一些知识的归纳总结
1.包装类型与基本数据类型的区别. Java语言是一个面向对象的语言,但是Java中的基本数据类型却是不面向对象的,这使得Java在实际使用时存在很多的不便,为了解决这个不足,在设计类时为每个基本数据 ...
- Python基础(6)_函数
一 为何要有函数? 不加区分地将所有功能的代码垒到一起,问题是: 代码可读性差 代码冗余 代码可扩展差 如何解决? 函数即工具,事先准备工具的过程是定义函数,拿来就用指的就是函数调用 结论:函数使用必 ...
- BZOJ 2063: 我爸是李刚
2063: 我爸是李刚 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 155 Solved: 82[Submit][Status][Discuss] ...
- js没有重载
javascript与其他语言(如java)不同,它没有传统意义上的重载(即为函数编写两个定义,只要这两个函数的参数类型或数量不同即可),在js中,后定义的函数会覆盖先前的函数.js中的参数在内部是用 ...
- Swift教程之运算符重载
http://blog.csdn.net/mengxiangyue/article/details/43437797 原文地址:http://www.raywenderlich.com/80818/o ...
- 创建第一个maven项目的那些坑
1.记事本方式: class所在的目录结构: class的代码书写: package com.imooc.maven01.mode1; public class HelloWorld { public ...