C++编程中如果输入或输出信息较多,使用cin/cout会导致TLE超时,如何提升输入输出效率,以AC相关问题。
一、换行使用换行符‘\n’,不要使用endl
endl除了换行还会刷新缓冲区,导致性能比较低,如果输出打印比较多,则会导致时间超时。‘\n’只换行,其不会刷新缓存区,所以效率高。
二、使用scanf/printf替代cin/cout
cin,cout效率低,是因为先把要输出的东西存入缓冲区,再输出,导致效率降低。
三、cin/cout优化
在程序开始处增加优化:
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
ios::sync_with_stdio(false)
“是否兼容 stdio”的开关,C++ 为了兼容 C,保证程序在使用了 printf 和 std::cout 的时候不发生混乱,将输出流绑到了一起。这样配置相当于进行解除绑定操作,配置后要注意不能同时使用 std::cin/std::cout 和 scanf/printf。
tie(0)
在默认的情况下cin绑定的是cout,每次执行 << 操作符的时候都要调用flush,这样会增加IO负担。可以通过tie(0)(0表示nullptr)来解除cin与cout的绑定,进一步加快执行效率。
四、快读
在数据量较大的情况下,即使使用 C 语言提供的 scanf 函数也可能超时,此时需要
快读函数。快读使用 getchar 获得每一个字符,其效率比 scanf高。
int read(){
int x = 0, f = 1;
char c = getchar();
while(c < '0' || c > '9'){
if(c == '-'){
f = -1;
}
c = getchar();
}
while(c >= '0' && c <= '9'){
x = x*10+c-'0';
c = getchar();
}
return x*f;
}
|