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

当然,如果程序算法本身就不高效,快读就更加重要了,可以让一些暴力程序获得更多的测试点分数,如果数据不大甚至能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. linux下文件传输一些方法整理.

    ftp类 ftp 命令已经不推荐使用了. #基本用法 lftp sftp://[domain name] lftp sftp://theURL.org #使用不同用户名 lftp sftp://[us ...

  2. Window操作系统_根据端口查看进行PID 并杀掉进程

    Windows 如何查看本地端口被进程占用的情况? 传送门 Windows 根据端口查看进行PID 并杀掉进程[推荐] 传送门 转载目的:做JavaWeb项目时总提示我80/8080端口号被占用... ...

  3. POJ 3342 Party at Hali-Bula ——(树型DP)

    一开始用pii保存dp类型,写的很长,还是WA了= =.. 然后参考了一下别人的博客,重新写了一发(似乎是岐哥的博客233). 代码如下: #include <stdio.h> #incl ...

  4. Nginx中配置非英文域名

    前两天遇到个配置越南语的域名的情况.域名和ip解析完成后,直接ping域名也不通,还以为是解析问题.研究了半天,nginx配置非英文域名时,需要有其他操作. 非英文域名转换成punycode编码才可以 ...

  5. k8s Ipvs 内部网络自动分配和内部网络一致ip地址,导致ip冲突

    [链接]Linux负载均衡--LVS(IPVS)https://www.jianshu.com/p/36880b085265 [链接]kube-proxyipvsmodecreateunnecessa ...

  6. pwn学习日记Day19 《程序员的自我修养》读书笔记

    windows PE/COFF章总结 本章学习了windows下的可执行文件和目标文件格式PE/COFF.PE/COFF文件与ELF文件非常相似,它们都是基于段的结构的二进制文件格式.Windows下 ...

  7. Mac 下 brew的卸载 插件

    brew 又叫 Homebrew,是 Mac OSX 上的软件包管理工具,能在 Mac 命令行中方便的安装软件或者卸载软件, 只需要一个命令, 非常方便 brew 类似 ubuntu 系统下的 apt ...

  8. React开发环境配置

    本文以上一篇文章继续配置:npm安装及环境配置<https://www.cnblogs.com/hzb462606/p/11565275.html> 使用 create-react-app ...

  9. Maven setting.xml简易配置

    使用国内阿里云的下载源: <?xml version="1.0" encoding="UTF-8"?> <settings> <l ...

  10. 阶段5 3.微服务项目【学成在线】_day05 消息中间件RabbitMQ_11.RabbitMQ研究-工作模式-路由工作模式测试

    先常见生产者 复制02的代码 先改一下交换机的名称 还需要制定routingKey.因为是两个消息 所以指定了两个routingKey 这里修改为当前指定的交换机名称 交换机和队列在绑定的时候指定我们 ...