博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数字统计类题目的非数位DP解法
阅读量:5025 次
发布时间:2019-06-12

本文共 756 字,大约阅读时间需要 2 分钟。

上题题意为求[l,r]区间中每个数字(0~9)出现的次数

一般的做法为将区间当成[0,r]-[0,l-1],然后进行数位DP

但事实上将区间当成[0,r]-[0,l-1]后可以有另一种方法求出[0,x]中k出现的次数

具体做法:

我们对于每一位,求出k在这一位的数中有多少小于等于x,累加即可。(注意0不能前导,要分开处理)

#define ll long longinline ll query(ll x,int k){
//询问[0,x]的数字中k出现的次数 if(x<0)return 0; ll sum=0,a=1,i=1,s=1,x1; while(x/10){
//枚举k出现在每一位 i=x%10,x/=10;//i表示k出现的这一位在原数中是什么,x表示原数中i之前的数字 x1=x; if(!k) x1--;//因为不能有前导零,所以0要分开 if(i>k)sum+=s*(x1+1);//3种情况分类讨论 else if(i==k)sum+=s*x1+a; else sum+=s*x1; a+=i*s,s*=10;//a表示原数中i之后的数字+1 } if(!k)return sum+1;//为k为0就无法做第一位 else{
//考虑x做第一位的情况 if(x>k)return sum+s; if(x==k)return sum+a; return sum; }}

 

转载于:https://www.cnblogs.com/bennettz/p/8041366.html

你可能感兴趣的文章
判断CPU大小端示例代码
查看>>
ARTS打卡第13周
查看>>
循环队列的运用---求K阶斐波那契序列
查看>>
pta 编程题14 Huffman Codes
查看>>
初始化bootstrap treeview树节点
查看>>
python selenium向<sapn>标签中写入内容
查看>>
JS常用坐标
查看>>
使用”结构化的思考方式“来编码和使用”流程化的思考方式“来编码,孰优孰劣?...
查看>>
C#调用斑马打印机打印条码标签(支持COM、LPT、USB、TCP连接方式和ZPL、EPL、CPCL指令)【转】...
查看>>
关于git的认证方式
查看>>
字符串按照字典序排列
查看>>
IOS 开发调用打电话,发短信
查看>>
CI 框架中的日志处理 以及 404异常处理
查看>>
keepalived介绍
查看>>
css3 标签 background-size
查看>>
python itertools
查看>>
Linux内核调试技术——jprobe使用与实现
查看>>
样式、格式布局
查看>>
ubuntu设计文件权限
查看>>
Vue双向绑定原理详解
查看>>