快读&快写模板【附O2优化】
快读&快写模板
快读快写,顾名思义,就是提升输入和输出的速度。在这里简单介绍一下几种输入输出的优劣。
C++ cin/cout 输入输出:优点是读入的时候不用管数据类型,也就是说不用背scanf/printf的%d、%c、%lld等繁琐的东西,但是缺点就是比scanf/printf慢一些。
C scanf/printf 输入输出:与C++对比,比cin/cout快一些,但使用方法细节比较多,容易出锅。
快读/快写:只能处理整数读入/输出,但是要比标准输入输出函数都快得多。
一般来讲,快读快写在针对数据量不是很大的输入输出的时候显得比较无力,但如果是多组数据或者输入量较多,就可以显著提升效率。
开不开inline差不多。
还有一种更快的fread()函数型快读,比一般的快读都要快,但是模板不太好理解,所以不加介绍。
快读模板及实现原理
快读是在字符读入的基础上进行效率优化的,其实现原理也很简单,看代码就可以理解了。x变量记录大小,f变量判断正负。
模板代码:
inline int read()
{
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9')
{
if(ch=='-')
f=-1;
ch=getchar();
}
while(ch>='0' && ch<='9')
x=x*10+ch-'0',ch=getchar();
return x*f;
}
(注:本人无压行习惯,所以造成行数比较多,实际使用的时候可以把它压缩,比较好调)
优化快读模板
机房大佬说这是快读的另一套模板,但是本蒟蒻以为这是同一种模板,只不过这个模板在读入速度上进行了优化而已。在原来的模板字符读入的基础上进行了提速。嗖嗖快。
代码:
char *p1,*p2,buf[100000];
#define nc() (p1==p2 && (p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++)
int read()
{
int x=0,f=1;
char ch=nc();
while(ch<'0'||ch>'9')
{
if(ch=='-')
f=-1;
ch=nc();
}
while(ch>='0'&&ch<='9')
x=x*10+ch-'0',ch=nc();
return x*f;
}
快写模板及实现原理
快写其实也是在字符输出(普遍认为字符输出比标准输出流快)的基础上进行按位分解,递归输出的。其基本原理还是先判正负再分解输出的。
模板代码:
void write(int x)
{
if(x<0)
putchar('-'),x=-x;
if(x>9)
write(x/10);
putchar(x%10-'0');
return;
}
附:O2优化
我们不用管O2优化的原理,只需要记住这个优化能使得程序的效率大大提高(我Jio得到底能提多少还是得看RP)。
手动打开O2开关:
#pragma GCC optimize(2)
快读&快写模板【附O2优化】的更多相关文章
- P1908 逆序对——树状数组&离散化&快读快写の学习
题目简述: 对于给定的一段正整数序列,逆序对就是序列中 a_i>a_jai>aj 且 i<ji<j 的有序对. 输出序列中逆序对的数目. 知识补充: 树状数组: 这东西就是 ...
- 卡常三连(快读快写+re)
快读: inline int in() { char ch; ; '))); a*=;a+=ch-'; ,a+=ch-'; return a; } 快写: inline void out(int a) ...
- c++ 快读快输模板
快读 inline int read() { ; ; char ch=getchar(); ; ch=getchar();} )+(X<<)+ch-'; ch=getchar();} if ...
- C++笔记——快读快写
直接开始吧 额m~,这里就没什么好说的了,无非就是用getchar加快cin或printf的读入速度. 代码: inline int read() { int X=0; bool flag = 1; ...
- C++ 快读快写
inline int read() { int s=0,f=1; char ch=getchar(); while(ch<'0'||ch>'9'){ if(ch=='-') f=-1; c ...
- C++中的快读和快写
快读原理 单个字符的读入速度要比读入数字快,因此我们以字符的形式先读入,然后处理计算转为数字. 代码 inline int read(){ register int x = 0, t = 1; reg ...
- C++ 加速(卡常)技巧【超级 快读、快写】
C++ \texttt{C++} C++ 加速技巧 快读快写 快读 inline int read() { int x = 0, w = 0; char ch = 0; while (!isdigit ...
- C++快读模板
C++的快速读入模板 inline int read() { ; char ch = getchar(); ') { if (ch == '-') flag = true; ch = getchar( ...
- 快读模板 + #define 压缩for
快读是一个很重要的模板 #define 压缩for是为了代码的简洁 这里贴一下模板 #define f(i , a , b) for(int i=(a) ; i <= (b) ; i++) us ...
随机推荐
- Day9 - Python基础9 socket基础、粘包
本节内容: 1.socket的介绍 2.基于tcp的socket 3.基于tcp的问题分析 4.基于udp的socket 5.基于udp的问题分析 6.基于udp的ntp服务 7.基于tcp的远程执行 ...
- Noip刷题计划
写在前面 去年也想刷10年NOIP来着..结果刷到13年就没动力了233... 今年一定要完成目标啊!! "愿你明日重生,醒时心存冬阳" 2018年 题目 首次得分 出错原因 考点 ...
- 【Oracle命令 】使用的sql语句之分组查询(group by)
由于本人并未对oracle数据库进行深入了解,但是工作中又需要知道一些基础的sql,所以记录下操作的sql语句.方便日后查看 1.将序列号作为分组查询的条件,再将查询出来的结果进行筛选. select ...
- 列举常见国内外做服务器与存储的IT厂家
列举常见国内外做服务器与存储的IT厂家 联想.浪潮.曙光.同有飞骥.迪菲特.宝德.星盈.元谷.威联通.群晖.忆捷.天敏等 华为.华三.戴尔.神州云科.同有.谷数,都是比较大的厂商 HDS(昆仑联通). ...
- Android应用图标尺寸以及drawable(ldpi、mdpi、hdpi、xhdpi、xxhdpi)
应用图标: L DPI ( Low Density Screen,120 DPI ),其图标大小为 36 x 36 px M DPI ( Medium Density Screen, 160 DPI ...
- python-execjs(调用js)
一.安装 pip3 install PyExecJS 电脑上要有nodejs环境 二.使用 一.获取js字符串 首先将js保存至于本地文件或者你可以可以直接读到内存,必须让js以字符串的形式展示 注意 ...
- PHP fread 文件系统函数
定义和用法 fread - 读取文件(可安全用于二进制文件) 版本支持 PHP4 PHP5 PHP7 支持 支持 支持 语法 fread ( resource $handle , int $lengt ...
- /etc/profile和~/.bash_profile等文件的区别和联系
对比说明:/etc/profile:为系统的每个用户设置环境信息和启动程序,当用户第一次登录时,该文件被执行,其配置对所有登录的用户都有效.当被修改时,必须重启才会生效.英文描述:”System wi ...
- 采坑 - LODOP,打印预览
结合 layui.弹出框内容样式如下: 红框表示,左右的内边距. 图一 打印预览的样式如下:红框表示,左右的内边距. 图二 要根据图二的左右内边距,去修改图一的左右内边距.不然会影响正文内容高度的判断 ...
- HTTP 压测工具wrk简介
前段时间项目压测,看到开发命令行下使用这个命令进行压测非常简洁.方便,萌发了学习的兴趣,这里仅做简单介绍. 安装 wrk支持大多数UNIX系统,不支持Windows.需要操作系统支持LuaJIT和Op ...