在ACM比赛过程中一些大牛(佬)瑺常会使用一些奇淫技巧来优化自己的代码。甚至就连最简单的输入输出
都有一些常人意想不到的小技巧
那么明明在C语言中有scanf()、printf(),C++中有cin、cout和cin为什么他们还要用输入输出外挂呢?这个问题很明显一定是因为这些输入输出函数功能过于强大而导致效率低。
但是实际上cin与scanf的輸入速度并没有多大差异cin
慢的原因主要在于默认cin
与stdin
总是保持同步, 这一步是消耗时间大户,所以如果我们在一些输入规模较大的程序中如果要采用cin输入的话我们就必须要关闭cin流输入与scanf的同步。
事实上大多数时候scanf,cin的读入速度即可满足我们的要求但是, 当输入规模达到1×10^6次方的时候此时scanf,cin输入所产生的时间代价就不可以再忽略了而当输入规模再增大到一定地步时,很有可能仅仅输入所耗费的时间就會导致程序超时
因此,一些大牛开始思考更快更高效的读入方法,因为scanf函数的功能远远要比我们所需的多而有些题目有可能我们只需要讀入整数这一种功能,所以我们可以针对这一点进行专门的改造例如,我们可以根据所有的输入本质上都是字符而采用getchar()输入然后轉换成相对应的数字。这样我们就得到了较为优秀的读入模板1:
但是大牛们并不满足,因此他们选择的更高效的fread的文件读入选择先将數据一次性的全读入内存,然后再逐步处理得到所需要的数据类型。并且他们把这些读入方式封装成了一个名为FAST IO的命名空间内。于是我们得到了史上最高效的读入数据模板2:
因为这个读入方法是如此的高效,有时候一些读入数据量较大的题目有可能通过这个读入方法所优化的时间来弥补算法设计上的不足此时它几乎起到了和游戏外挂相似的效果,因此我们把这种读入方法称为“输入挂”
当然输入輸出外挂一般用在大量输入输出的情况下,这样性价比才高一些否则得不偿失(牺牲了代码长度而换来了微不足道的效率提升)。
今天我们希望每一个人都能够体验一把大牛的感觉,因此我们在这里给出了输入挂的模板大家只需套用模板即可 获取这道题目的AC。
接下来昰 n 个由空格分开的整数
输出倒数第二个输入的数