有的时候题目的输入数据量比较大,比如要输入10W和数字进行排序。这个时候,如果你直接使用C++的cin和cout函数进行输入输出,有很大的概率会超出题目的时间限制。
在这种情况下,需要的优化的就不再是你的算法过程,而是你的读写数据的速度优化。
如果使用cin和cout函数进行输入输出,我们建议你在main()里首先写入下面两行代码。
C++ cin/cout加速
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
如果题目的输入量巨大,比如要输入100W个数字,这个时候我们建议你使用C语言的scanf和printf语句进行输入输出。
如果在这种情况下还超时,那么你就需要用到下面的输入输出加速外挂了。
//适用于正负整数
template <class T>
inline bool scan_d(T &ret) {
char c; int sgn;
if(c=getchar(),c==EOF) return 0; //EOF
while(c!='-'&&(c<'0'||c>'9')) c=getchar();
sgn=(c=='-')?-1:1;
ret=(c=='-')?0:(c-'0');
while(c=getchar(),c>='0'&&c<='9') ret=ret*10+(c-'0');
ret*=sgn;
return 1;
}
inline void out(int x) {
if(x>9) out(x/10);
putchar(x%10+'0');
}
加速外挂原理:
getchar的速度 快于 scanf的速度
速度比较
getchar > scanf > cin
putchar > printf > cout
参考代码
// 求1 + n 的和
#include <bits/stdc++.h>
using namespace std;
//适用于正负整数
template <class T>
inline bool scan_d(T &ret) {
char c; int sgn;
if(c=getchar(),c==EOF) return 0; //EOF
while(c!='-'&&(c<'0'||c>'9')) c=getchar();
sgn=(c=='-')?-1:1;
ret=(c=='-')?0:(c-'0');
while(c=getchar(),c>='0'&&c<='9') ret=ret*10+(c-'0');
ret*=sgn;
return 1;
}
inline void o...
掌握输入输出加速技巧
登录后开始许愿
暂无评论,来抢沙发