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. 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 ran in 2355 ms, barely under the time limit of 2.5 seconds. Then, 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 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.