从0,1,2...n中统计0,1,2...9各出现了多少次【SWUN1597】
题目就是说给你一个N。计算一下从0,1,2,3,4,5,,,,,,n-1,n中计算出0,1,2,3,,,,7,8,9分别出现了多少次...
#include<cstdio>
#include<cstring> typedef unsigned __int64 LL; LL dp[11][25][12];
/*
*dp[k][i][j]表示记录目标数字k,第i位取j时,从0位到i位一共有多少个
*/
int bit[25];
LL tenk[22];//10^k
LL n; inline void Init()
{
memset(dp,-1,sizeof dp);
int i;
tenk[0]=1;
for(i=1;i<22;++i)
tenk[i]=tenk[i-1]*10;
} inline int work(LL val)
{
int len=0;
for(;val;val/=10)
bit[++len]=val%10;
return len;
/*
*把val从高位到低位存
*e.g.:val=132,bit=2 3 1
*/
} inline LL dfs(int p,int s,int tar,int u,int e)
{
/*
*直接套用的数位dp模板...
*p: 从高位到低位位置p
*s: 从第一位非0数字开始s=1
*tar: 目标数字
*u: 上一步取u
*e: 边界
*/
if(p<1)
return s&&u==tar;
if(~dp[tar][p][u] && !e && s) return dp[tar][p][u];
/*
*记忆化如果目标数字tar p+1位取u,记忆过。而且s为1
*/
int mx=e?bit[p]:9,i;
LL ret=0;
for(i=0;i<=mx;++i)
{
int news=(s||i>0);
if(i==tar && news)
{
/*
*如果当前位取i而且是目标数字,而且s=1,要两种情况
*如果是边界,而且不是最后一位:加剩下的
*如果不是边界,而且不是最后一位: ret+=10^p-1个数
*->4567 如果目标数字是4而且不是最后一位,当到第4位(从右到左,第4位取4),是边界所以ret要加4567%10^(4-1)==567
*->4567 如果目标数字是4而且不是最后一位,当到第3位(从右到左,第3位取4),不是是边界所以ret要加10^(3-1)==100
*/
if(e&&i==mx)
{
if(p!=1)
ret+=(n%tenk[p-1])+1;
}else if(p!=1)
{
ret+=tenk[p-1];
}
}
ret+=dfs(p-1,news,tar,i,e&&i==mx);
}
if(!e && s) dp[tar][p][u]=ret;
return ret;
} int main()
{
int i;
Init();
while(~scanf("%I64u",&n))
{
int len=work(n);
int ok=0;
for(i=0;i<10;++i)
{
if(ok) putchar(32);
ok=1;
LL ret=dfs(len,0,i,0,1);
if(i==0) ret++;
printf("%I64u",ret);
}
putchar(10);
}
return 0;
}
/*
18446744073699999999 */
从0,1,2...n中统计0,1,2...9各出现了多少次【SWUN1597】的更多相关文章
- String.format("%0"+length+"d", arr)中的%0和"d"分别代表什么
public static void main(String[] args) { int a = 8; String s = String.format("%04d", a); S ...
- MySQL 8.0 中统计信息直方图的尝试
直方图是表上某个字段在按照一定百分比和规律采样后的数据分布的一种描述,最重要的作用之一就是根据查询条件,预估符合条件的数据量,为sql执行计划的生成提供重要的依据在MySQL 8.0之前的版本中,My ...
- excel中统计COUNTIFS的值为0
excel中统计COUNTIFS的值为0 个人认为是由于导出的文件里面的字符个数问题 使用 =COUNTIFS(H1:H175,"微信支付") 这个的结果居然是0,找了很多办法 于 ...
- 求N的阶乘N!中末尾0的个数
求N的阶乘N!中末尾0的个数 有道问题是这样的:给定一个正整数N,那么N的阶乘N!末尾中有多少个0呢?例如:N=10,N=3628800,则N!的末尾有两个0:直接上干货,算法思想如下:对于任意一个正 ...
- spark机器学习从0到1基本的统计工具之(三)
给定一个数据集,数据分析师一般会先观察一下数据集的基本情况,称之为汇总统计或者概要性统计.一般的概要性统计用于概括一系列观测值,包括位置或集中趋势(比如算术平均值.中位数.众数和四分位均值),展型 ...
- vs2013中2.0类库提示是英文,解决方案
将C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\zh-Hans下的XML文件复 ...
- 错误:违反并发性: DeleteCommand 影响了预期 1 条记录中的 0 条
在access的mdb数据库动态更新的过程中,遇到了DeleteCommand出现DBConcurrencyException异常,错误:违反并发性: DeleteCommand 影响了预期 1 条记 ...
- Bash 中的 $0 在什么时候不是 argv[0]
每个 C 程序都有一个 main 函数,每个 main 函数都有一个 argv 参数,这个参数是一个字符串数组,这个数组的值是由该 C 程序的父进程在通过 exec* 函数启动它时指定的. 很多人说 ...
- vc6.0运用mysql数据库中的编码所导致的乱码问题(接收和输出的编码必须要一致)
[编译中遇见的问题] ①在用vc 6.0去调用MySQL中的数据时,出现中文乱码 ②不明白mysql中的码制 [开始解决问题] ①打开mysql控制台 ...
随机推荐
- ASP.NET中MEMCACHED
一,准备 你需要有一下软件: VS.NET(05/08) SQLSERVER memcached服务器端以及客户端类库(开源软件,下载即可)其中,客户 ...
- MySQL基础之第1章 数据库概述
1.1.数据存储方式 1.人工管理阶段2.文件系统阶段3.数据库系统阶段 1.2.数据库泛型 数据库泛型就是数据库应该遵循的规则.数据库泛型也称为范式.目前关系数据库最常用的四种范式分别是:第一范式( ...
- IOS 多级列表展开控件
项目中实现了一个可以多级展开的列表控件.每次展开都是互斥的,就是说,展开一个cell 就会关闭其他展开的层. 可以呈现的效果如下图.第一个图片是应用中实现的效果.第二个是Demo中的效果.如果有新的需 ...
- MyBatis的association示例——MyBatis学习笔记之三
前两篇博文介绍的都是单表映射,而实际上很多时候我们需要用到较复杂的映射.今天学会的association的用法,就是一例,现写出来和大家分享(为简洁起见,ant工程中各文件.目录的布局,以及其它与前面 ...
- DevExpress z
1.TextEditor(barEditItem)取文本 string editValue = barEditItem1.EditValue.ToString(); //错误,返回null st ...
- 转载: Vim 练级攻略
转自:http://coolshell.cn/articles/5426.html 酷壳 vim的学习曲线相当的大(参看各种文本编辑器的学习曲线),所以,如果你一开始看到的是一大堆VIM的命令分类, ...
- UVA 10529-Dumb Bones(概率dp)
题意: 给出放一个多米诺骨牌,向左向右倒的概率,求要放好n个骨牌,需要放置的骨牌的期望次数. 分析: 用到区间dp的思想,如果一个位置的左面右面骨牌都已放好,考虑,放中间的情况, dp[i]表示放好前 ...
- python的Requests模块使用tips
post方法提交的是表单,要用data放dict get方法请求的是参数,要用params放dict HTTP头部是大小写不敏感的
- [CODEVS1697]⑨要写信
题目描述 Description 琪露诺(冰之妖精)有操控冷气的能力.能瞬间冻结小东西,比普通的妖精更危险.一直在释放冷气的她周围总是非常寒冷. 由于以下三点原因…… 琪露诺的符卡 冰符“Icicle ...
- HDU5634 Rikka with Phi 线段树
// HDU5634 Rikka with Phi 线段树 // 思路:操作1的时候,判断一下当前区间是不是每个数都相等,在每个数相等的区间上操作.相当于lazy,不必更新到底. #include & ...