在一些算法题目中中,有的程序会被卡常(数),就是说,程序虽然渐进复杂度,(通俗来讲:算法的时间复杂度)可以接受,但因为算法本身的时间常数过大,导致程序在一些算法竞赛中超时。这是,快读就显得尤为重要了。

当然,如果程序算法本身就不高效,快读就更加重要了,可以让一些暴力程序获得更多的测试点分数,如果数据不大甚至能AC,此时快读就是“得分法宝”

快速读入可以让大家的输入更快,这里做了一个测试:快读究竟有多快?(编译器dev-c++ 5.5.3,标准模式(非debug))

 #include <cstdio>
#include <ctime>
#include <iostream>
#define LOOP 2 //循环次数
#define DATA 100000 //数据规模
struct dat{
int i,s,c;dat(int a=,int b=,int k=){i=a,s=b,c=k;}
}dats[+];
inline int Readi(){//快读
int x;
int fh=;
char a=getchar();
while(''>a || ''<a){//首先过滤掉非数字字符(注意符号的处理)
if(a=='-') fh=-;
a=getchar();
}
while(''<=a && a<=''){//小技巧:x=x*10 可以进位
x=x*+a-'';
a=getchar();
}
return x*fh;
}
void TryPrint(){
FILE* fp=fopen("in.txt","w");//输出数据
for(int i=;i<=DATA;++i)fprintf(fp,"%d ",i);
fclose(fp);//关闭文件
//一定要注意,不关闭文件,数据会写到缓冲区里,可能会丢数据)
}
void TryReadi(){
int t;for(int i=;i<=DATA;++i)t=Readi();
}
void TryReads(){
int t;for(int i=;i<=DATA;++i)scanf("%d",&t);
}
void TryReadc(){
int t;for(int i=;i<=DATA;++i)std::cin>>t;
}
int main(){
freopen("out.txt","a",stdout);
printf("数据规模:%d 循环次数:%d 单位:ms\n",DATA,LOOP);
freopen("in.txt","r",stdin);//读入数据文件(只读)
for(int k=;k<=LOOP;++k){
freopen("out.txt","a",stdout);
freopen("in.txt","r",stdin);//读入数据文件(只读)
TryPrint();clock_t p=clock();
TryReadi();clock_t i=clock();
TryReads();clock_t s=clock();
printf("快读:%u\n",i-p);
printf("scanf输入:%u\n",s-i);
dats[k]=dat(i-p,s-i,);
}
double sum=0.0;for(int k=;k<=LOOP;++k)sum+=dats[k].i;printf("快读平均:%.0f\n",sum/LOOP);
sum=0.0;for(int k=;k<=LOOP;++k)sum+=dats[k].s;printf("scanf平均:%.0f",sum/LOOP);
return ;
}

快速读入代码:大家可以自己修改,在自己电脑上测试(注意:cin这里我在测试时出现了读入都是零的问题,导致时间过少,求各位大神解决)

测试结果

数据规模:1000000 循环次数:5 单位:ms
快读:50
scanf输入:1113
快读:50
scanf输入:1130
快读:58
scanf输入:1116
快读:52
scanf输入:1168
快读:51
scanf输入:1130
快读平均:52
scanf平均:1131

由此得,快读比scanf快了很多。所以大家在读入较大数据规模时,应尝试快读。

在我的测试中,快写就没有快读那么神奇了,反而比scanf/printf更慢,可能是由于进行了过多的除法和取余数

C/C++快读(快速读入)有多——安全AC的更多相关文章

  1. [C/C++]快速读入代码(快读)

    快读 1.为什么要有快读 好吧,有些题目看上去十分简单,例如https://www.luogu.com.cn/problem/P4305这道题,实际上数据量巨多,光是一个测试点就可能有几个MB,在这种 ...

  2. C++手写快读详解(快速读入数字)

    众所周知,C++里是自带读入的(这不废话吗) 例如: int a; cin>>a; 这样的读入理解简单,适合初学者,但是非常慢. 再例如: int a; scanf("%d&qu ...

  3. C++读入神器——文操快读(oj也可以用)

    当某天,本蒟蒻沉迷于卡常的时候: 我-- 突然,YYKdalao说:用文操快读啊! 然后 喔-目瞪口呆 不多说,上源码: 本来用的读入方式: inline void Read( int &x ...

  4. C++快读模板

    C++的快速读入模板 inline int read() { ; char ch = getchar(); ') { if (ch == '-') flag = true; ch = getchar( ...

  5. 快读&快写模板【附O2优化】

    快读&快写模板 快读快写,顾名思义,就是提升输入和输出的速度.在这里简单介绍一下几种输入输出的优劣. C++ cin/cout 输入输出:优点是读入的时候不用管数据类型,也就是说不用背scan ...

  6. int快读

    昨天偶然间看到CJ_tony的快读,所以便决定学习一下. 这个快读的原理就是:读入单个字符要比读入读入数字快,先读入字符,然后再转化成数字.(原理的话大学再研究) 代码: #include<io ...

  7. C++中的快读和快写

    快读原理 单个字符的读入速度要比读入数字快,因此我们以字符的形式先读入,然后处理计算转为数字. 代码 inline int read(){ register int x = 0, t = 1; reg ...

  8. 卡常三连(快读快写+re)

    快读: inline int in() { char ch; ; '))); a*=;a+=ch-'; ,a+=ch-'; return a; } 快写: inline void out(int a) ...

  9. hdu6396 /// fread()快速读入挂

    题目大意: 给定n k 给定主角具有的k种属性 给定n个怪兽具有的k种属性和打死该怪兽后能得到的k种属性对应增幅 求主角最多能打死多少怪兽和最终主角的k种属性 k最大为5 开5个优先队列贪心 快速读入 ...

随机推荐

  1. ECMAScript 5.0 基础语法(下)“稍微重点一点点”

    接上篇 七.常用内置对象(复杂数据类型)(重点) (1)数组Array 创建:例  var colors = ['red','blue','green']       #推荐这样,因为简单粗暴 或:v ...

  2. python 安装 pyHook

    下载网站:https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyhook 查看python版本 C:\Users\k\Desktop\file_trans> ...

  3. Ubuntu14.04 dd命令克隆系统镜像安装到另一台机器上

    linux系统如果想做备份还原,使用ghost的时候经常出现问题,后来发现可以直接使用dd命令完成硬盘的克隆和还原.当拷贝完硬盘后,就可以拿这个硬盘放到其它设备上跑了.也就是完成了“烧写”了. 用U盘 ...

  4. 为ubuntu安装powerline记录

    C:\Users\win10的用户名\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\L ...

  5. FreeMarker学习(springmvc配置)

    springMvc配置 <bean id="freemarkerConfig" class="org.springframework.web.servlet.vie ...

  6. Kibana——安装部署

    1.准备 JDK:1.8版本及以上: Kibana:6.2.4版本: 2.安装 2.1.下载解压 wget https://artifacts.elastic.co/downloads/kibana/ ...

  7. mysql left join对于索引不生效的问题

    SELECT t.val, m.username FROM  test.tmp_table AS t LEFT JOIN cehome.uc_members AS m USE INDEX(`mobil ...

  8. Java8中List的removeif()函数的使用示例

    代码: import java.util.List; import java.util.function.Predicate; import org.springframework.beans.fac ...

  9. MySQL数据库相关资料

    python 全栈开发,Day60(MySQL的前戏,数据库概述,MySQL安装和基本管理,初识MySQL语句) python 全栈开发,Day61(库的操作,表的操作,数据类型,数据类型(2),完整 ...

  10. Zabbix 3.4.3 使用阿里云短信服务进行报警

    目录 一.阿里云短信服务 1.1.首先开通阿里云短信服务 1.2 创建签名 1.3 创建短信模板 1.4 创建发送脚本 二.Zabbix Web 配置 2.1 增加 Media types 2.2 给 ...