使用 fflush 加速代码以防止超出时间限制

问题描述

如果标准输出没有被刷新,下面的代码会得到 TLE(超出时间限制)。

with

刷新输出缓冲区如何帮助克服 TLE?
这是问题链接 - https://www.spoj.com/problems/EXPECT/

解决方法

问题说明告诉你该怎么做:

注意:打印每一行后,程序应该清除输出缓冲区。

可以使用 fflush(stdout) 命令或在执行开始时设置适当的缓冲类型 - setlinebuf(stdout) 来完成。

问题标题说明原因:

(互动)

评判软件正在交互式运行程序。在给程序一个输入之后,它在提供更多输入之前等待输出。当您的程序没有刷新缓冲输出时,判断软件会一直等待,直到超过其时间限制。

通常,到终端的输出流是行缓冲的,在这种情况下,打印换行符会导致它们被刷新。但是,这个判断软件很可能使用的是完全缓冲的管道,因此在缓冲区已满或您明确请求刷新(或者,在程序开始时,您将缓冲模式更改为无缓冲或行缓冲)。

当你刷新输出时,评判软件会看到它,然后它会继续提供更多的输入。

作为在每个 printf 之后刷新输出的替代方法,您可以通过在程序开始时(在对流执行任何其他操作之前)执行 setvbuf(stdout,NULL,_IOLBF,0); 来将流设置为行缓冲模式.