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[难][前缀和]的更多相关文章

  1. [MISSAJJ原创] UITableViewCell移动及翻转出现的3D动画效果[58同城cell移动效果]

    2015-11-20 很喜欢在安静的状态, 听着音乐,敲着键盘, 和代码们浓情对话, 每一份代码的积累, 都让自己觉得很充实快乐!Y(^_^)Y. 看到58同城app的cell有动画移动出现的特效,很 ...

  2. UVa 11134 - Fabled Rooks——[问题分解、贪心法]

    We would like to place n rooks, ≤ n ≤ , on a n × n board subject to the following restrictions • The ...

  3. React JS的基本用法[ES5,纯前端写法]

    1.配置webpack npm install -g webpack #webpack的cli npm install -g webpack-dev-server #webpack自带的服务器 npm ...

  4. UIAlertView[警告框] [代理协议型]UIActionSheet [表单视图][代理协议型]

    ////  ViewController.h//  UIAlertViewAndUIActionSheet////  Created by hehe on 15/9/21.//  Copyright ...

  5. UIProgressView[进度条][一般型];UIStepper步数器][事件驱动型]

    ////  ViewController.m//  ProgressAndSteper////  Created by hehe on 15/9/21.//  Copyright (c) 2015年 ...

  6. [cocos2d-x][apk打包][Fatal signal 11][andriod]Eclipse编译Fatal signal 11报错-都是字符赋值惹的祸

    流程重现: 使用coco2d-x制作了一个2048,在xcode模拟器执行以及在pad上真机调试都是没有问题的. 可是在使用eclipse调试打包android可以执行,可是进入游戏之后会在随机的地方 ...

  7. [Android游戏开发学习笔记]View和SurfaceView

    本文为阅读http://blog.csdn.net/xiaominghimi/article/details/6089594的笔记. 在Android游戏中充当主要角色的,除了控制类就是显示类.而在A ...

  8. [转载非常好的文章]JLink+GDBServer调试S3C6410裸板的初始化代码 For OK6410开发板

    要调试裸板,有两种初始化方法,一个是用烧好的uboot初始化,再有就是直接用JLink+GDBServer初始化.代码参考了网上的资料,根据手头的OK6410开发板做了修改.整体代码如下: # Con ...

  9. 1025 PAT Ranking[排序][一般]

    1025 PAT Ranking (25)(25 分) Programming Ability Test (PAT) is organized by the College of Computer S ...

随机推荐

  1. 将Spring源代码导入eclipse步骤

    深入学习spring.研读源代码是必须的~ 1.到https://github.com/spring-projects/spring-framework/releases去找自己须要的spring版本 ...

  2. Linux下gcc编译生成动态链接库*.so文件并调用它(注:执行Test程序后无需用export 命令指定.so库文件路径:方法在文中下方;)

    动态库*.so在linux下用c和c++编程时经常会碰到,最近在网站找了几篇文章介绍动态库的编译和链接,总算搞懂了这个之前一直不太了解得东东,这里做个笔记,也为其它正为动态库链接库而苦恼的兄弟们提供一 ...

  3. C语言的基本构成

    C语言的基本构成 知识点:C语言的注释:关键字:书写风格:常量和变量 重要程度:★★★★ 1.C语言的良好风格 用C语言编写的程序,称为C语言源程序,简称C程序. 本节将通过一个简单的C程序例子,向大 ...

  4. SecureCRT 详细使用图文教程(按步骤)

    一.安装和激活 安装 1.在http://www./softs/55471.html下载相关包激活工具,运行scrt622-x86.exe. 2.进入安装向导程序,默认下一步,直到安装完成既可以. 破 ...

  5. 使用C#语言实现一些功能

    今天由于是周六,所以就没讲课啦,于是我就仔细看啦几道还没掌握的题,然后总结啦一下. 一.三级联动 像这个三级联动吧,感觉在做网站时间肯定会用到啦,但是那时间肯定不会是这样子做的啦,不可能把所有的省市区 ...

  6. 使用vim-pathogen 进行插件管理

    使用vim的插件管理器 pathogen进行vim的插件管理. 1. pathogen 管理插件 pathogen让每个插件占有一个单独的目录,解决了文件分散的问题.安装完 pathogen之后,只需 ...

  7. 【jQuery系列之插件】jQuery插件---exselect实现联动

    <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title> ...

  8. Sass-学习笔记【基础篇】

    最下边附结构图 在线编辑器网址如下:http://sassmeister.com/  注意编写的时候,符号千万别用了中文的:.:.....之类的,会报错,Sass也转换不成css. less和sass ...

  9. 关于PreparedStatement.addBatch()方法 (转)

    Statement和PreparedStatement的区别就不多废话了,直接说PreparedStatement最重要的addbatch()结构的使用. 1.建立链接,(打电话拨号 ) Connec ...

  10. java EE ME SE有什么关系

    1. Java SE(Java Platform,Standard Edition).Java SE 以前称为 J2SE.它允许开发和部署在桌面.服务器.嵌入式环境和实时环境中使用的 Java 应用程 ...