Is scanf/printf ever too slow?
Разница между en1 и en2, 17 символ(ов) изменены
Usually, I hear people saying that `std::cin` and `std::cout` is a relatively slow form of input while `scanf` and `printf` is a faster form of input which should be sufficient for all problems. However, sometimes I wonder if there are any problems where `scanf` and `printf` would be too slow.↵

For example, look at the problem [1181D — Irrigation](https://codeforces.net/contest/1181/problem/D). This problem asks us to read in 500,000 numbers, each of which could be as large as 500,000, and then asks us to read in 500,000 more numbers, each of which could be as large as $10^{18}$. Clearly, this is a lot of input/output, so users should use `scanf` and `printf` over `std::cin` and `std::cout`. However, even when I used `scanf` and `printf`, [my solution](https://codeforces.net/contest/1181/submission/56247817) ran in 2355 ms, barely under the time limit of 2.5 seconds. 
ThenOn the other hand, when I rewrote my code using an I/O library I wrote myself, which uses `fread` and `fwrite` to read/write 32768 bytes at a time, [my improved solution](https://codeforces.net/contest/1181/submission/56247773) ran in 592 ms, almost 4 times faster than the original solution.↵

Since my code barely ran under time using `scanf` and `printf`, I wonder if there are any CodeForces problems where using `scanf` and `printf` will inevitably lead to a Time Limit Exceeded error and users must use some other I/O method like I did. Has anyone else encountered a problem where `scanf` and `printf` just weren't quite fast enough? Moreover, has anyone else built a custom I/O library for competitive programming like I did? If anyone has knows how to do input/output faster than `fread` and `fwrite`, I would love to hear about it.

История

 
 
 
 
Правки
 
 
  Rev. Язык Кто Когда Δ Комментарий
en2 Английский Noble_Mushtak 2019-06-29 02:21:40 17 fixed erroneous detail
en1 Английский Noble_Mushtak 2019-06-29 02:20:04 1746 Initial revision (published)