对于输入数据非常大的一些可(变)爱(态)题目,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++读入优化的更多相关文章

  1. fread读入优化,寻找速度极限

    序: 在之前的测试中,我们比较了四种读入方式,发现使用读入优化是最快的选择,但是我们知道fread()是比它更快的方法.这一次,我们对比四种读入优化,探寻C++读取速度的极限. 分别是getchar( ...

  2. OI黑科技:读入优化

    利用getchar()函数加速读入. Q:读入优化是什么? A :更加快速地读入一些较大的数字. Q:scanf不是已经够快了吗? A:Naive,scanf还是不!够!快! Q:那怎么办呢? A:我 ...

  3. ACM:读入优化

    两个简单的读入优化 int getin(){ ;; while(!isdigit(tmp=getchar()) && tmp!='-'); ,tmp=getchar(); )+(ans ...

  4. c++ 读入优化、输出优化模板

    0. 在有些输入数据很多的变态题中,scanf会大大拖慢程序的时间,cin就更慢了,所以就出现了读入优化.其原理就是一个一个字符的读入,输出优化同理,主要使用getchar,putchar函数. 1. ...

  5. 【ACM非算法部分】读入优化

    今天做了ACdream的比赛才知道原来还有读入优化这一说.Orz 读入一个整数的时候这么写: int a; scanf("%d",&a); 和 int a; char c; ...

  6. 读入优化&输出优化

    读入优化 int read() { ; ') ; '; ') num=num*+c-'; return ff*num; } 输出优化 void write(int x) { ) { putchar(' ...

  7. C++ 读入优化&输出优化

    读入优化:读入优化只是针对整数,由于getchar()读字符非常的快,所以采用getchar()来进行读入,下设输入的数为x 负数处理:用一个标志变量f,开始时为1,当读入了'-'时,f变为-1,最后 ...

  8. HDU 5972 Regular Number(ShiftAnd+读入优化)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5972 [题目大意] 给出一个字符串,找出其中所有的符合特定模式的子串位置,符合特定模式是指,该子串 ...

  9. 【CSP模拟赛】天才绅士少女助手克里斯蒂娜(线段树&读入优化&输出优化)

    题面描述 红莉栖想要弄清楚楼下天王寺大叔的显像管电视对“电话微波炉(暂定)”的影响.选取显像管的任意一个平面,一开始平面内有个n电子,初始速度分别为vi,定义飘升系数为 $$\sum_{1\leqsl ...

随机推荐

  1. Blender 使用

    教程: 1.https://www.youtube.com/watch?v=N8-mE-165b8&index=7&list=PLE885296A496C3D38 快捷键: http: ...

  2. 内部排序->归并排序->2-路归并排序

    文字描述 假设初始序列有n个记录,则可看成是n个有序的字序列,每个字序列的长度为1,然后两两归并,得到[n/2]个长度为2或1的有序子序列:再两两归并,…, 如此重复,直到得到一个长度为n的有序序列为 ...

  3. Java之旅_面向对象_封装

    参考并摘自:http://www.runoob.com/java/java-encapsulation.html 在面向对象的程序设计方法中,封装(英语 :Encapsulation)是指一种将函数接 ...

  4. qemu-kvm内存虚拟化1

    2017-04-18 记得很早之前分析过KVM内部内存虚拟化的原理,仅仅知道KVM管理一个个slot并以此为基础转换GPA到HVA,却忽略了qemu端最初内存的申请,而今有时间借助于qemu源码分析下 ...

  5. scss是什么?在vue.cli中的安装使用步骤是?有哪几大特性?

    css的预编译: 使用步骤: 第一步:用npm下三个loader(sass-loader.css-loader.node-sass): 第二步:在build目录找到webpack.base.confi ...

  6. what' the python之面向对象(进阶)

    面向对象的知识点补充(进阶版) classmethod和staticmethod:这两个函数的用途就是可以不用实例化对象就可以调用方法 class Classmethod_Demo(): role = ...

  7. Mysql事件监控日志

    建立监控表: CREATE TABLE `t_event_history` ( id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, `dbname ...

  8. git基础知识

    Git的两大功能 1.协作开发 2.版本控制 版本库 版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改.删除,Git都 ...

  9. vue-父组件向子组件传递方法

    1.父组件向子组件传递方法,使用的是事件绑定机制 v-on:传递给子组件的方法名=“父组件中的方法”

  10. MySQL深入理解

    [存储引擎] InnoDB表引擎 默认事务型引擎,最重要最广泛的存储引擎,性能非常优秀. 数据存储在共享表空间,可以通过配置分开. 对主键查询的性能高于其他类型的存储引擎. 内部做了很多优化,从磁盘读 ...