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 ...
随机推荐
- 下载mysql server安装包的时候,不登录oracle账号,实现下载
需求描述: 之前下载mysql安装包的时候,都是使用oracle账号进行登录下载,最近看到可以不登录账号 就实现下载的方法,在此记录下. 操作过程: 1.选择mysql linux服务器上的安装包,点 ...
- module、applet
Each Module is developed as a standalone Windows DLL.Each module can contain one or more applets, an ...
- C# 多线程操作队列
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...
- 用cocos2d 2.1制作一个过河小游戏(4): 游戏主逻辑BaseLayer设计
前段时间一直在忙.没有时间更新博客.今天还是抽点时间把最后一小部分游戏的实现放上来吧. BaseLayer.h: #import <GameKit/GameKit.h> #import & ...
- 使用React写的一个小小的登录验证密码组件
哎,算了.直接上代码吧,不懂得私聊我把 <!DOCTYPE html> <html lang="en"> <head> <meta cha ...
- ios UIButton得 几种触发方式
在控件事件中,简单解释下下面几个事件.说明:由于是在“iOS 模拟器”中测试的,所以不能用手指,只能用鼠标.1)UIControlEventTouchDown指鼠标左键按下(注:只是“按下”)的动作2 ...
- 《C++ Primer Plus》15.5 类型转换运算符 学习笔记
C++相对C更严格地限制允许的类型转换,并添加4个类型转换运算符,是转换过程更规范:* dynamic_cast:* const_cast:* static_cast:* reinterpret_ca ...
- win10下安装Oracle 11g 32位客户端遇到INS-13001环境不满足最低要求
在以管理员身份运行setup.exe之后,出现了:[INS-13001]环境不满足最低要求,通过网上搜索之后找到了解决途径 首先,打开你的解压后的database文件夹,找到stage,然后cvu,找 ...
- poj_3579 二分法
题目大意 给定N个数,这些数字两两求差构成C(N,2)(即N*(N-1)/2)个数值,求这C(N,2)个数的中位数.N <= 100000. 题目分析 根据数据规模N最大为100000,可知不能 ...
- 【微信开发】PC端 微信扫码支付成功之后自动跳转
场景: PC端 微信扫码支付 结果: 支付成功 自动跳转 实现思路: 支付二维码页面,写ajax请求支付状态,请求到结果,无论成功还是失败,都跳转到相应的结果页面 具体实现方法: html部分: ...