BZOJ 1833 ZJOI2010 count 数字计数 数位DP

时间:2022-09-02 08:08:39

题目大意:求[a,b]间全部的整数中0~9每一个数字出现了几次

令f[i]为i位数(算前导零)中每一个数出现的次数(一定是同样的,所以仅仅记录一个即可了)

有f[i]=f[i-1]*10+10^(i-1)

然后照例十进制拆分

当中计算[0,999...9]的时候要从1~9枚举最高位,然后其余位调用f[i-1]就可以

剩余部分已知位直接乘,未知位调用f[i]

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
ll ans[10],f[20];
inline void Resolve(ll x,ll pos)
{
while(x)
ans[x%10]+=pos,x/=10;
}
void Digital_DP(ll x,int flag)
{
int i,j;
ll pos,now;
for(i=1,pos=10;pos<x;++i,pos*=10)
{
for(j=0;j<=9;j++)
ans[j]+=f[i-1]*9*flag;
for(j=1;j<=9;j++)
ans[j]+=pos/10*flag;
}
now=pos/=10;--i;
while(now<x)
{
while(now+pos<=x)
{
ll temp=now/pos;
Resolve(temp,pos*flag);
for(j=0;j<=9;j++)
ans[j]+=f[i]*flag;
now+=pos;
}
pos/=10;--i;
}
}
int main()
{
int i;
ll a,b,pos;
f[1]=1;
for(i=2,pos=10;i<=12;i++,pos*=10)
f[i]=f[i-1]*10+pos;
cin>>a>>b;
Digital_DP(b+1,1);
Digital_DP(a,-1);
for(i=0;i<=9;i++)
printf("%lld%c",ans[i],i==9?'\n':' ');
}

BZOJ 1833 ZJOI2010 count 数字计数 数位DP的更多相关文章

  1. 1833&colon; &lbrack;ZJOI2010&rsqb;count 数字计数——数位dp

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1833 省选之前来切一道裸的数位dp.. 题意 统计[a,b]中0~9每个数字出现的次数(不算 ...

  2. BZOJ 1833&colon; &lbrack;ZJOI2010&rsqb;count 数字计数&lpar; dp &rpar;

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

  3. bzoj1833&colon; &lbrack;ZJOI2010&rsqb;count 数字计数&lpar;数位DP&plus;记忆化搜索&rpar;

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

  4. &lbrack;bzoj1833&rsqb;&lbrack;ZJOI2010&rsqb;count 数字计数——数位dp

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

  5. &lbrack;BZOJ 1833&rsqb; &lbrack;ZJOI2010&rsqb; count 数字计数 【数位DP】

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

  6. bzoj 1833&colon; &lbrack;ZJOI2010&rsqb;count 数字计数【数位dp】

    非典型数位dp 先预处理出f[i][j][k]表示从后往前第i位为j时k的个数,然后把答案转换为ans(r)-ans(l-1),用预处理出的f数组dp出f即可(可能也不是dp吧--) #include ...

  7. BZOJ 1833&colon; &lbrack;ZJOI2010&rsqb;count 数字计数

    Description 问 \([L,R]\) 中0-9的个数. Sol 数位DP. 预处理好长度为 \(i\), 最高位为 \(j\) 的数位之和. 然后从上往下计算,不要忘记往下走的同时要把高位的 ...

  8. bzoj1833&colon; &lbrack;ZJOI2010&rsqb;count 数字计数 数位dp

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

  9. bzoj 1833 &lbrack;ZJOI2010&rsqb;count 数字计数(数位DP)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1833 [题意] 统计[a,b]区间内各数位出现的次数. [思路] 设f[i][j][k ...

随机推荐

  1. 不透明度opacity进阶

    一.opacity属性 1.opacity 习惯上说“透明度”,其实应该叫“不透明度”.opacity 意思:不透明,而背景色的默认值:transparent意思才是“透明的”.所以opacity用来 ...

  2. PHP基础之 重载 的实现方式

    ===================PHP中的伪重载Overloading================== PHP中没有像C#或java中的重载,但可以通其它方法实现重载 重载:属性重载与方法重 ...

  3. &lbrack;转载&rsqb;C&plus;&plus;异常机制的实现方式和开销分析

    原文章网址:http://baiy.cn/doc/cpp/inside_exception.htm C++异常机制的实现方式和开销分析 白杨 http://baiy.cn 在我几年前开始写<C+ ...

  4. DES加解密实现方式

    private static readonly byte[] _keys = { 0x22, 0x84, 0x56, 0x98, 0x90, 0xAB, 0xpD, 0xEF }; private s ...

  5. Linux - tomcat -jndi数据源配置

    Linux - tomcat -jndi数据源配置 tomcat/conf/context .xml 文件中修改如下 <Resource name="/jdbc/--" au ...

  6. CLR查找和加载程序集的方式(二) 流程图

    在前一篇文章<CLR查找和加载程序集的方式(一)>中详细介绍了CLR查找和加载程序的方式,分别介绍了配置与代码的实现方式. 本篇通过一个具体的流程图来帮助大家更加直观明了深入的掌握CLR查 ...

  7. (转)Spring boot——logback&period;xml 配置详解(四)&lt&semi;filter&gt&semi;

    文章转载自:http://aub.iteye.com/blog/1101260,在此对作者的辛苦表示感谢! 1 filter的使用 <filter>: Logback的过滤器基于三值逻辑( ...

  8. CMake搜索Boost1&period;57失败及解决

    CMake更新到3.1.0,Boost更新到1.57,结果CMake搜索Boost失败: Unable to find the Boost header files.  Please set BOOS ...

  9. 0&period;1&period;3 set的用法

    set的特性是,所有元素都会根据元素的键值自动排序,set的元素不像map那样可以同时拥有实值(value)和键值(key),set元素的键值就是实值,实值就是键值.set不允许两个元素有相同的键值. ...

  10. 访问url地址 但tomcat会发两次请求??

    statDate===2017-06-27================2017年7月11日 16:06:43执行成功,共删除0条.2017年7月11日 16:06:43执行成功,共插入48835条 ...