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; }
|