Link:

BZOJ 1833 传送门

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] 数字计数的更多相关文章

  1. BZOJ 1833 数字计数 数位DP

    题目链接 做的第一道数位DP题,听说是最基础的模板题,但还是花了好长时间才写出来..... 想深入了解下数位DP的请点这里 先设dp数组dp[i][j][k]表示数位是i,以j开头的数k出现的次数 有 ...

  2. BZOJ 1833: [ZJOI2010]count 数字计数( dp )

    dp(i, j, k)表示共i位, 最高位是j, 数字k出现次数. 预处理出来. 差分答案, 对于0~x的答案, 从低位到高位进行讨论 -------------------------------- ...

  3. 【BZOJ】【1833】【ZJOI2010】count 数字计数

    数位DP Orz iwtwiioi 学习了一下用记忆化搜索来捉题的新姿势……但没学会TAT,再挖个坑(妈蛋难道对我来说数位DP就是个神坑吗……sigh) //BZOJ 1833 #include< ...

  4. [BZOJ 1833] [ZJOI2010] count 数字计数 【数位DP】

    题目链接:BZOJ - 1833 题目分析 数位DP .. 用 f[i][j][k] 表示第 i 位是 j 的 i 位数共有多少个数码 k . 然后差分询问...Get()中注意一下,如果固定了第 i ...

  5. UVA.1640.The Counting Problem / BZOJ.1833.[ZJOI2010]数字计数(数位DP)

    题目链接 \(Description\) 求\([l,r]\)中\(0,1,\cdots,9\)每个数字出现的次数(十进制表示). \(Solution\) 对每位分别DP.注意考虑前导0: 在最后统 ...

  6. BZOJ 1833 【ZJOI2010】 数字计数

    题目链接:数字计数 没啥好说的,裸裸的数位\(dp\). 先枚举当前是算数字\(x\)出现的次数,设\(f_{i,j}\)表示从高位往低位\(dp\),\(dp\)完了前\(i\)位之后\(x\)出现 ...

  7. 1833: [ZJOI2010]count 数字计数

    1833: [ZJOI2010]count 数字计数 Time Limit: 3 Sec  Memory Limit: 64 MBSubmit: 2951  Solved: 1307[Submit][ ...

  8. 【BZOJ-1833】count数字计数 数位DP

    1833: [ZJOI2010]count 数字计数 Time Limit: 3 Sec  Memory Limit: 64 MBSubmit: 2494  Solved: 1101[Submit][ ...

  9. BZOJ_1833_[ZJOI2010]_数字计数_(数位dp)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1833 统计\(a~b\)中数字\(0,1,2,...,9\)分别出现了多少次. 分析 数位dp ...

随机推荐

  1. taotao前台页面显示登录用户名的处理

    思路: 在每个页面上都引入一个 jsp,这个 jsp 可以是页面的头 head 或者脚 footer.jsp 然后在这个 jsp 中引入 一个 js,这个 js 中 有个 随页面加载 而执行的 方法, ...

  2. 用@Component注解代替@Configuration注解,定义bean

    package com.timo.entity; import org.springframework.beans.factory.annotation.Value; import org.sprin ...

  3. IDEA新建时选项没有java class问题

    解决办法: 点击你的project F4打开project stucture 点击左边的module 点击右边的source后添加src就可以了  添加的src就是源码可以放置的地址

  4. 【Atcoder】ARC083 D - Restoring Road Network

    [算法]图论,最短路? [题意]原图为无向连通图,现给定原图的最短路矩阵,求原图最小边权和,n<=300. [题解]要求最小边权和下,原图的所有边一定是所连两端点的最短路. 那么现在将所有最短路 ...

  5. 密码框JPasswordField 的使用

    JPasswordField的主要方法为setEchoChar(char c),其中的字符C为回显字符. package first; import javax.swing.*; import jav ...

  6. Linux c括号作用域【原创笔记】

    大师指点后,所做的笔记,很感谢一起愿意研究技术的同事,以下不是本人原创,是他分析的成果 #include <stdio.h> #include <time.h> struct ...

  7. Linux IO 同步/异步 阻塞/非阻塞

    同步IO:导致请求进程阻塞,直到IO操作完成: 是内核通知我们何时进行启动IO操作,而实际的IO操作需要当前进程本身阻塞完成: 包括:阻塞式IO模型,非阻塞式IO模型,IO复用模型,信号驱动式IO模型 ...

  8. spin_lock浅析【转】

    转自:http://blog.csdn.net/frankyzhangc/article/details/6569475 版权声明:本文为博主原创文章,未经博主允许不得转载. 今天我们详细了解一下sp ...

  9. Winform常用操作

    >> c#操作cmd命令 using System.Diagnostics; private string RunCmd(string command) { //实例一个Process类, ...

  10. SQL Server数据库优化笔记

    不定时更新 select DateDiff(month,'2018-06-07',GETDATE()) PACTBEGINDATE ORDER BY PACTBEGINDATE ASC),GETDAT ...