CSU 1642 Problem B[难][前缀和]
Description
已知两个正整数a和b,求在a与b之间(包含a和b)的所有整数的十进制表示中1出现的次数。
Input
多组数据(不超过100000组),每组数据2个整数a,b.(1≤a,b≤1000000).
Output
每组数据的答案占一行。
Sample Input
1 10
10 100
2 1
Sample Output
2
20
1
题目大意:给出两个数,求这两个数之间的十进制数中1出现的个数。
//看完不会,如果是二进制数出现的个数那就简单了。
前缀和问题:
https://blog.csdn.net/K_rew/article/details/50527287#commentBox
一维前缀和,主要是在O(1)时间内求出a[i]+a[i+1]....+a[j]的和,那么就是sum[j]-sum[i-1].
一般是在数据量很大的时候,不能挨个去遍历,那么就需要先求出前缀和来进行降低复杂度。
代码来自:https://blog.csdn.net/bobo1356/article/details/71105934
前缀和是一种预处理手段,空间换时间。
#include<iostream>
#include<stdio.h>
using namespace std; const int maxn = 1e6+;
int sum[maxn]; //sum[i]表示前i个数中所包含的1出现的次数之和 //cal函数求a中所包含的1的个数
int cal(int a)//这个只是计算每个数中包含的1的个数。使用%即可。
{
int cnt = ;
while(a)
{
if(a% == ) cnt++;
a /= ;
}
return cnt;
} int main()
{
//求sum[0]-sum[1e6]的值
sum[] = ;
for(int i=; i<=1e6; i++)//可以不写六个0,而使用这种形式。
{
sum[i] = sum[i-] + cal(i);
} int a,b;
while(scanf("%d%d",&a,&b) != EOF)
{
if(a>b)
{
int tmp = a;
a = b;
b = tmp;
}
printf("%d\n",sum[b]-sum[a-]);
}
return ;
}
//这样就降低了时间复杂度,过程是这样的,由于输入中最多包含1e5次组数据,并且每个的最大范围为0-1e6,那么进行三个假设,
假设数据组数为T,a,b的范围为N,a~b中间的每一个数需要进行M次运算,那么此时为O(T*M*N)
但是如果使用了前缀和,计算sum[i]=sum[i-1]+cal[i];//那么以后每次就可以查询了
变为了:O(1*T)+O(N*M)
注意前一项中,每组数据查询都是O(1)的复杂度,所以是O(1*T);
后一项中,是进行预处理的复杂度,就不会超时了。
//真的是很厉害了!膜一下~
CSU 1642 Problem B[难][前缀和]的更多相关文章
- [MISSAJJ原创] UITableViewCell移动及翻转出现的3D动画效果[58同城cell移动效果]
2015-11-20 很喜欢在安静的状态, 听着音乐,敲着键盘, 和代码们浓情对话, 每一份代码的积累, 都让自己觉得很充实快乐!Y(^_^)Y. 看到58同城app的cell有动画移动出现的特效,很 ...
- UVa 11134 - Fabled Rooks——[问题分解、贪心法]
We would like to place n rooks, ≤ n ≤ , on a n × n board subject to the following restrictions • The ...
- React JS的基本用法[ES5,纯前端写法]
1.配置webpack npm install -g webpack #webpack的cli npm install -g webpack-dev-server #webpack自带的服务器 npm ...
- UIAlertView[警告框] [代理协议型]UIActionSheet [表单视图][代理协议型]
//// ViewController.h// UIAlertViewAndUIActionSheet//// Created by hehe on 15/9/21.// Copyright ...
- UIProgressView[进度条][一般型];UIStepper步数器][事件驱动型]
//// ViewController.m// ProgressAndSteper//// Created by hehe on 15/9/21.// Copyright (c) 2015年 ...
- [cocos2d-x][apk打包][Fatal signal 11][andriod]Eclipse编译Fatal signal 11报错-都是字符赋值惹的祸
流程重现: 使用coco2d-x制作了一个2048,在xcode模拟器执行以及在pad上真机调试都是没有问题的. 可是在使用eclipse调试打包android可以执行,可是进入游戏之后会在随机的地方 ...
- [Android游戏开发学习笔记]View和SurfaceView
本文为阅读http://blog.csdn.net/xiaominghimi/article/details/6089594的笔记. 在Android游戏中充当主要角色的,除了控制类就是显示类.而在A ...
- [转载非常好的文章]JLink+GDBServer调试S3C6410裸板的初始化代码 For OK6410开发板
要调试裸板,有两种初始化方法,一个是用烧好的uboot初始化,再有就是直接用JLink+GDBServer初始化.代码参考了网上的资料,根据手头的OK6410开发板做了修改.整体代码如下: # Con ...
- 1025 PAT Ranking[排序][一般]
1025 PAT Ranking (25)(25 分) Programming Ability Test (PAT) is organized by the College of Computer S ...
随机推荐
- 把握linux内核设计思想(七):内核定时器和定时运行
[版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流,请勿用于商业用途] 前面章节说到了把工作推后到除如今以外的时间运行的机制是下半部机 ...
- BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第14章节--使用Office Services开发应用程序 WOPI和新的Office Web Apps Server
BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第14章节--使用Office Services开发应用程序 WOPI和新的Office Web Apps Server ...
- simple fix 主从不一致滴error
Last_SQL_Error: Error 'Unknown table 'bb'' on query. Default database: 'test'. Query: 'DROP TABLE `b ...
- Java集合----Map集合
Map Map 用于保存具有映射关系的数据,因此 Map 集合里保存着两组值,一组值用于保存 Map 里的 Key,另外一组用于保存 Map 里的 Value Map 中的 key 和 value 都 ...
- UIBarButtonItem
1.UINavigationController导航控制器如何使用 UINavigationController可以翻译为导航控制器,在IOS里经常用到. 我们看看它的如何使用: 下面的图显示了导航控 ...
- PyQt4消息窗口
默认情况下,如果我们单击了窗口标题栏上的X标记,窗口就会被关闭.但是有些时候我们想要改变这一默认行为.比如,我们正在编辑的文件内容发生了变化,这时若单击X标记关闭窗口,编辑器就应当但出确认窗口. #! ...
- JDK1.8在LINUX下安装步骤
JDK1.8在LINUX下安装步骤: 在/usr/lib/目录下新建jvm文件夹,如果已有jvm文件夹,则将之前的JDK版本删除,即在jvm目录下执行命令:rm –rf * 将JDK文件jdk-8u4 ...
- openstack将本地实例迁移至ceph存储中
需求: 最近在openstack上线了ceph存储,创建虚拟机和云硬盘都基于ceph卷进行存储和创建,但是之前openstack用的是本地存储,创建的所有实例都在本地文件中,当实例重启之后,opens ...
- 【Mysql】 case ... when ... 用法
sql语句查询时给某个空字段赋值 SELECT CASE WHEN field= '' THEN ' WHEN fieldIS NULL THEN ' ELSE field END FROM tabl ...
- linux 程序启动与停止管理脚本
公司接了一个第三方的系统,基于linux写的几个程序,一共有9个部件,第三方没有给脚本,每次启动或停止都得一个一个手工去停止或修改.......,这里稍微鄙视下. 没办法,求人还不如自己动手写, 需求 ...