c++读入优化
对于输入数据非常大的一些可(变)爱(态)题目,scanf就会大大拖慢程序的运行速度,cin就更不用说了,所以我们要用一种高大上的东西——读入优化。
读入优化的原理其实就是一个一个字符的读入,再组成数字
==================================================================
下面贴一段读入优化的模板
int read()
{
int x=,f=;
char ch;
while(ch<''||ch>'') {if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return f*x;
}
这就是最基本的读入优化,通过getchar函数依次读入字符,用x记录答案,用f判断正负。
ps:在主程序中调用时int n=read();即可
===========================前方高能预警===============================
下面是dalao的读入优化模板
template<class T>void read(T &x)
{
x=;int f=;char ch=getchar();
while(ch<''||ch>'') {f|=(ch=='-');ch=getchar();}
while(ch>=''&&ch<=''){x=(x<<)+(x<<)+(ch^);ch=getchar();}
x=f?-x:x;
return;
}
template就是让这个函数随时可以调用,而且可以用int、double、char……(反正很装13就对了)
用了指针,会快更会装13。
下面的f|=(ch=='-')如果ch==‘-’,f就改符号(还可以判断多个负号),位运算,会快
<<x就相当于2^x,会非常快;
最后问号表达式装13
总之就是一个优(装)化(B)的读入优化
ps:不过TA真的比普通的读入优化要很多
pss:调用时直接read(n)就好了这就是指针的好处
===========================我是分
割线================================
以下的读入优化需要在freopen条件下使用(其实用的不是很多,大多数情况用上面那种)
下面是比以上读优都要快的julao的读入优化(划重点)fread
inline char GET_CHAR(){
static char buf[maxn],*p1=buf,*p2=buf;
return p1==p2&&(p2=(p1=buf)+fread(buf,,maxn,stdin),p1==p2)?EOF:*p1++;
}
template<class T>void read(T &x)
{
x=;int f=;char ch=GET_CHAR();
while(ch<''||ch>'') {f|=(ch=='-');ch=GET_CHAR();}
while(ch>=''&&ch<=''){x=(x<<)+(x<<)+(ch^);ch=GET_CHAR();}
x=f?-x:x;
return;
}
简单的来说就是把getchar函数手写,改为文件读入(fread)。
eg:fread原理:把数据流整段的存到数组buf中,整段的读取,数组存满了再重新覆盖。所以比getchar()一个一个读要快
其实我也不是很懂fread,感性理解吧QAQ。
===========================我是分
割线================================
一点点忠告:说实话用不用读入优化完全看自己,如果要用就把它当做一个模板,哪怕是a+b的时候也打上。我就是这样(有点读入情节)虽然有的时候并不能快多少,但是至少会让自己的代码效率稍微高那么一丢丢,而且天天打,永远不会错。
但有些dalao平时不用,考试的时候打上,其实我不太建议这样。因为身边有好几个朋友都是因为在考场上读优打错,然后0分。非常的可惜,所以如果考试要用的话最好多打几次保证自己不会错,防止在复赛上gg
NOIP2018RP++;
感谢学姐uncle-lu的模板
61646D696E
c++读入优化的更多相关文章
- fread读入优化,寻找速度极限
序: 在之前的测试中,我们比较了四种读入方式,发现使用读入优化是最快的选择,但是我们知道fread()是比它更快的方法.这一次,我们对比四种读入优化,探寻C++读取速度的极限. 分别是getchar( ...
- OI黑科技:读入优化
利用getchar()函数加速读入. Q:读入优化是什么? A :更加快速地读入一些较大的数字. Q:scanf不是已经够快了吗? A:Naive,scanf还是不!够!快! Q:那怎么办呢? A:我 ...
- ACM:读入优化
两个简单的读入优化 int getin(){ ;; while(!isdigit(tmp=getchar()) && tmp!='-'); ,tmp=getchar(); )+(ans ...
- c++ 读入优化、输出优化模板
0. 在有些输入数据很多的变态题中,scanf会大大拖慢程序的时间,cin就更慢了,所以就出现了读入优化.其原理就是一个一个字符的读入,输出优化同理,主要使用getchar,putchar函数. 1. ...
- 【ACM非算法部分】读入优化
今天做了ACdream的比赛才知道原来还有读入优化这一说.Orz 读入一个整数的时候这么写: int a; scanf("%d",&a); 和 int a; char c; ...
- 读入优化&输出优化
读入优化 int read() { ; ') ; '; ') num=num*+c-'; return ff*num; } 输出优化 void write(int x) { ) { putchar(' ...
- C++ 读入优化&输出优化
读入优化:读入优化只是针对整数,由于getchar()读字符非常的快,所以采用getchar()来进行读入,下设输入的数为x 负数处理:用一个标志变量f,开始时为1,当读入了'-'时,f变为-1,最后 ...
- HDU 5972 Regular Number(ShiftAnd+读入优化)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5972 [题目大意] 给出一个字符串,找出其中所有的符合特定模式的子串位置,符合特定模式是指,该子串 ...
- 【CSP模拟赛】天才绅士少女助手克里斯蒂娜(线段树&读入优化&输出优化)
题面描述 红莉栖想要弄清楚楼下天王寺大叔的显像管电视对“电话微波炉(暂定)”的影响.选取显像管的任意一个平面,一开始平面内有个n电子,初始速度分别为vi,定义飘升系数为 $$\sum_{1\leqsl ...
随机推荐
- Excel--数据透视图
原文:https://ke.qq.com/course/289406 1.数据源注意项 2. 3.选中数据源操作 任意选中数据源表格中的单元格(有值得单元格),插入数据透视表 默认数据源区域就是整个表 ...
- 2018/05/02 每日一学Linux 之 .bash_profile和.bashrc的区别
最近一直在学习其他,导致博客就疏忽了,很不好(其实就是自己懒了......). -- 为什么要使用 .bash_profile和.bashrc ? 在平常的使用中,有些文件夹或者命令很长,在执行时需要 ...
- Java之旅_面向对象_重写和重载
参考并摘自:http://www.runoob.com/java/java-override-overload.html 重写(Override) 子类对父类(允许访问的)方法的实现过程进行重新编写, ...
- Python开发【异步】:asyncio
异步asyncio asyncio是一个使用async / await语法编写并发代码的库. asyncio用作多个Python异步框架的基础,这些框架提供高性能的网络和Web服务器,数据库连接库,分 ...
- 【pyqtgraph绘图】线条,填充和颜色
解读官方API-线条,填充和颜色 参考: http://www.pyqtgraph.org/documentation/style.html 线条,填充和颜色 Qt依靠其QColor,QPen和QBr ...
- RNN 网络
原文:http://yangguang2009.github.io/2016/12/18/deeplearning/recurrent-neural-networks-for-deep-learnin ...
- Python3学习之路~6.6 类的继承
Inheritance 继承 面向对象编程 (OOP) 语言的一个主要功能就是“继承”.继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展.通过继承创 ...
- Python3学习之路~6.2 实例演示面向对象编程的好处
首先建一个dog类,实例化为3个dog对象,并让它们都叫. class Dog: def bulk(self): print("xiaohuang:wang wang wang !" ...
- 【CART与GBDT】
一.CART(分类回归树) 1.思想: 一种采用基尼信息增益作为划分属性的二叉决策树.基尼指数越小,表示纯度越高. 2.回归: 每个节点都有一个预测值,预测值等于属于该节点的所有样例的 ...
- Python基础-编码与解码
一.什么是编码 编码是指信息从一种形式或格式转换为另一种形式或格式的过程. 在计算机中,编码,简而言之,就是将人能够读懂的信息(通常称为明文)转换为计算机能够读懂的信息.众所周知,计算机能够读懂的 ...