从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控制台 ...
随机推荐
- bzoj1876: [SDOI2009]SuperGCD
更相减损数. 上手就debug了3个小时,直接给我看哭了. 3个函数都写错了是什么感受? 乘2函数要从前往后乘,这样后面的数乘2进位以后不会干扰前面的数. 除2函数要从后往前除,这样前面的数借来的位不 ...
- sharepoint Linq方式的增,删,查,改
Site9527EntitiesDataContext (重要的类):连接实体与网站List操作 SPContext.Current.Web.Url:获取当前操作的页面 FirstOrDefault: ...
- 如何使用jetty
一直都听说jetty跟Tomcat一样,是一个web容器.之前做项目的时候,也使用过jetty,不过当时jetty是作为一个插件,跟maven集成使用的.那个时候,由于是第一次使用jetty,感觉je ...
- UVA 10537 The Toll! Revisited 过路费(最短路,经典变形)
题意:给一个无向图,要从起点s运送一批货物到达终点e,每个点代表城镇/乡村,经过城镇需要留下(num+19)/20的货物,而经过乡村只需要1货物即可.现在如果要让p货物到达e,那么从起点出发最少要准备 ...
- ssl选购
上机实践,参考了: http://www.lovelucy.info/nginx-ssl-certificate-https-website.html http://nginx.org/cn/docs ...
- [转] ArcEngine 产生专题图
小生原文 ArcEngine 产生专题图 ArcEngine提供多个着色对象用于产生专题图,可以使用标准着色方案,也可以自定义着色方案,ArcEngine提供8中标准着色方案. 一.SimpleRen ...
- Mybatis拦截器介绍
拦截器的一个作用就是我们可以拦截某些方法的调用,我们可以选择在这些被拦截的方法执行前后加上某些逻辑,也可以在执行这些被拦截的方法时执行自己的逻辑而不再执行被拦截的方法.Mybatis拦截器设计的一个初 ...
- VelocityTracker简单用法
VelocityTracker顾名思义即速度跟踪,在android中主要应用于touch event, VelocityTracker通过跟踪一连串事件实时计算出 当前的速度,这样的用法在androi ...
- UVA 12532-Interval Product(BIT)
题意: 给n个数字的序列,C v p 把v位上的数字置成p , S l r代表求区间[l,r]各数字相乘得数的符号,对于每个S输出所得符号(’+‘,’-‘,’0‘) 分析: 开两个数组表示区间负数的个 ...
- Backbone.js developer 武汉 年薪8w-10w
1. 精通Backbone.js 2. 熟练Ajax.NoSQL.RESTful APIs 3. 了解Pusher.com和 Parse.com 4. 具有良好的沟通能力,学习能力,敬 ...