OI常用读入方式效率测试
- n = 102时
- n = 104时
- n = 105时
#include<cstdio>
#include<ctime>
#include<cstdlib>
#define random(x) (rand()%x)
const int n = ;
int main(){
freopen("testdata.in","w",stdout);
srand((unsigned int)time());
for (int i = ;i < n;i++)
printf("%d\n",random(RAND_MAX)*random(RAND_MAX));
return ;
}
一号选手cin:
#include<iostream>
#include<cstdio>
#include<ctime>
using namespace std;
const int n = ;
int x;
int main(){
freopen("testdata.in","r",stdin);
clock_t st,ed;
st = clock();
for (int i = ;i < n;i++)
cin >> x;
ed = clock();
printf("%fseconds",(double)(ed-st)/CLOCKS_PER_SEC);
return ;
}
二号选手scanf:
#include<iostream>
#include<cstdio>
#include<ctime>
using namespace std;
const int n = ;
int x;
int main(){
freopen("testdata.in","r",stdin);
clock_t st,ed;
st = clock();
for (int i = ;i < n;i++)
scanf("%d",&x);
ed = clock();
printf("%fseconds",(double)(ed-st)/CLOCKS_PER_SEC);
return ;
}
三号选手读入优化:
#include<iostream>
#include<cstdio>
#include<ctime>
using namespace std;
const int n = ;
int x;
inline int read(){
int num = ;
char c;
bool flag = false;
while ((c = getchar()) == ' ' || c == '\n' || c == '\r');
if (c == '-') flag = true;
else
num = c - '';
while (isdigit(c = getchar()))
num = num * + c - '';
return (flag ? - : ) * num;
} int main(){
freopen("testdata.in","r",stdin);
clock_t st,ed;
st = clock();
for (int i = ;i < n;i++)
x = read();
ed = clock();
printf("%fseconds",(double)(ed-st)/CLOCKS_PER_SEC);
return ;
}
进行测试。结果如下表
在n = 100的数据量下,表现的都还不错,那么n = 10^4的时候将会如何呢?
虽然这样的时间差肉眼很难分辨,但是差距还是的确存在的。
读入优化占据上风,拿到了平均0.0128s的成绩。scanf也不甘示弱,平均读入时间有0.0374s。但cin就比较惨了,只有0.0688s。
很清楚的可以看出,三种读入方式已经开始有了差别。
那么在数据量较大的10^5,三种读入方式会有怎样的表现呢?
测试发现
至此,三种读入方式的速度差异已见分晓。
scanf平均0.384s,比读入优化的0.142s慢了一些。
cin这个时候已经gg了,0.7344s,如果是单点时限1s的题,光读入就会耗掉超过七成的时间。如果算法不够优,可能就会TLE。
即使数据量很大,读入优化也是还能保证到能在很短时间内读取大量数据,所以可以说是当之无愧的“黑科技”了。
今天比较晚了,本来还想简要提一下scanf和cin 的原理并且分析速度慢的原因的,看来只能放在以后了。
明天更新夏令营Day4知识点整理。
OI常用读入方式效率测试的更多相关文章
- 【转】Verilog HDL常用建模方式——《Verilog与数字ASIC设计基础》读书笔记(四)
Verilog HDL常用建模方式——<Verilog与数字ASIC设计基础>读书笔记(四) Verilog HDL的基本功能之一是描述可综合的硬件逻辑电路.所谓综合(Synthesis) ...
- SoapUI 的几种常用参数化方式
今天给大家来梳理下soapui这款工具关于参数化的几种方式以及具体的应用场景 1.properties 官方文档:https://www.soapui.org/docs/functional-test ...
- 5分钟白嫖我常用的免费效率软件/工具!效率300% up!
Mac 免费效率软件/工具推荐 1. uTools(Windows/Mac) 还在为了翻译 English 而专门下载一个翻译软件吗? 还在为了格式某个 json 文本.时间戳转换而打开网址百度地址吗 ...
- NHibernate Demo 和 效率测试
本文关于NHibernate的Demo和效率测试,希望对大家有用. 1.先去官网下载Nhibernate 2.放入到项目中并建立Helper类 private static ISession _Ses ...
- jQuery中ajax的4种常用请求方式
jQuery中ajax的4种常用请求方式: 1.$.ajax()返回其创建的 XMLHttpRequest 对象. $.ajax() 只有一个参数:参数 key/value 对象,包含各配置及回调函数 ...
- iOS代码加密常用加密方式
iOS代码加密常用加密方式 iOS代码加密常用加密方式,常见的iOS代码加密常用加密方式算法包括MD5加密.AES加密.BASE64加密,三大算法iOS代码加密是如何进行加密的,且看下文 MD5 iO ...
- DataGridView 中添加CheckBox和常用处理方式 .
DataGridView 中添加CheckBox和常用处理方式 文章1 转载:http://blog.csdn.net/pinkey1987/article/details/5267934 DataG ...
- 关于 pgsql 数据库json几个函数用法的效率测试
关于 pgsql 数据库json几个函数用法的效率测试 关于pgsql 几个操作符的效率测试比较1. json::->> 和 ->> 测试方法:单次运行100次,运行10个单次 ...
- python常用执行方式&变量&input函数
linux系统中执行py文件方式: ./a.py 需要执行权限 chmod -R 777(最大权限) 常用执行方式: 1. ./a.py2. python a.py 文件内部头加上 #!/usr/b ...
随机推荐
- python内建函数isinstance基础用法
语法:isinstance(object,type) 作用:来判断一个对象是否是一个已知的类型. 其第一个参数(object)为对象,第二个参数(type)为类型名(int...)或类型名的一个 ...
- 如何开发由Create-React-App 引导的应用(一)
此文章是翻译How to develop apps bootstrapped with Create React App 官方文档 系列文章 如何开发由Create-React-App 引导的应用 如 ...
- linux日志查看命令
tail tail 命令用于显示文本文件的末尾几行, 对于监控文件日志特别有用 tail example.txt #显示文件 example.txt 的后十行内容: tail -n 20 exampl ...
- mysql数据库备份及还原
数据库备份代码: package com.gd.test; import java.io.BufferedReader; import java.io.FileOutputStream; import ...
- php switch case语句用法
- 什么是A记录/CNAME记录/MX记录/TXT记录
答: A 记录(Address)是用来指定主机名(或域名)对应的IP地址记录.当你输入域名的时候给你引导向设置在DNS的A记录所对应的服务器. CNAME记录 ( Canonical Name )是一 ...
- oracle03
(1)表中数据操作 插入数据: a.插入单条 insert into myemp(empno,ename) values(1111,'张三'); b.批量插入 insert into myemp se ...
- cpuimage 开源之
前年学习opengl做的一个小东西. 原本计划将gpuimage 的算法一个一个转写成cpu版本 c,c++ 版本. gpuimage 项目参考: https://github.com/BradLar ...
- duilib消息类型
//定义所有消息类型 ////////////////////////////////////////////////////////////////////////// #define DUI_MS ...
- ssm打印sql语句
在mybatis配置文件中添加<setting name="logImpl" value="STDOUT_LOGGING"/> <?xml v ...