我之前看见一个巨佬在用下面这种不用 getchar() 的快读:
char buffer[Buffer_Size], *ihead = buffer + Buffer_Size, *itail = ihead;
inline char Next_Char() {
if (ihead == itail) fread(buffer, 1, Buffer_Size, stdin), ihead = buffer;
return *ihead++;
}
inline void read(int &x) {
x = 0; char ch = Next_Char(); int f = 1;
while (!isdigit(ch)) f -= (ch == '-') << 1, ch = Next_Char();
while (isdigit(ch)) x = (x << 1) + (x << 3) + (ch & 15), ch = Next_Char();
x *= f;
}
虽然这种快读优化非常不错,但是这种快读有的时候会发生玄学的错误。
比如很久以前有道 龙虎斗 就卡了我整整一页提交,然后现在的 任务安排 在 acwing 上过不了,改成 cin 就 A 了。
请问这种快读什么时候会错,该怎么避免或者解决。