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 ...
随机推荐
- 启用lazyload插件,减少图片加载
使用lazyload的js插件,减少图片加载,提高页面加载速度和节省流量.虽然这个头像是第三方服务器来的,不消费博客的流量,但是能节省部分访客的加载时间,也是不错的哦. 用lazyload插件,只是后 ...
- oracle最精简客户端(3个文件+1个path变量就搞定oracle客户端)
oracle最精简客户端: network\admin\tnsnames.ora (自己新建)oci.dlloraocieill.dll 将oci.dll的路径加到path变量中就可以了 tnsnam ...
- motion移植
一. 支持ffmpeg功能(使能motion中的视频编码功能)支持视频采集 —> ffmpeg不支持 —host 1. mkdir _install 2. ./configure —pref ...
- XML高速入门
XML是什么 Extensible Markup Language 自己定义标签: 用来数据传输: 可扩展标记语言,是一种类似超文本标记语言的标记语言. 与HTML的比較: 1.不是用来替代HTML的 ...
- EF--CodeFirst
1,增加EntityFramework的引用 2,创建实体类 public class Invoice { public Invoice() { LineItems = new List<Lin ...
- 设置Android应用程序横竖屏显示
设置Android应用程序横竖屏显示有2中方式: 1.在mainfest中增加android:screenOrientation属性 <?xml version="1.0" ...
- redis客户端使用密码
./redis-cli -h 127.0.0.1 -p 6379 -a password
- 【PHP】数字补零的两种方法
在php中有两个函数,能够实现数字补零, str_pad() sprintf() 函数1 : str_pad 顾名思义这个函数是针对字符串来说的这个可以对指定的字符串填补任何其它的字符串 例如:str ...
- LeetCode——Move Zeroes
Description: Given an array nums, write a function to move all 0's to the end of it while maintainin ...
- jstl标签怎么实现分页中下一页
<script type="text/javascript"> //分页按钮处理 function goPageAction(page ...