使用 fflush 加速代码以防止超过时间限制
Using fflush for speeding up code to prevent a time limit exceeded
如果未刷新标准输出,则以下代码将获得 TLE(超出时间限制)。
#include<stdio.h>
int main(){
int a;
while(1){
scanf("%d",&a);
printf("%d\n",a);
fflush(stdout);
if(a==42)
break;
}
return 0;
}
刷新输出缓冲区如何帮助克服 TLE?
这就是问题 link - https://www.spoj.com/problems/EXPECT/
问题说明告诉你该怎么做:
Attention: the program should clear the output buffer after printing each line.
It can be done using fflush(stdout) command or by setting the proper type of buffering at the beginning of the execution - setlinebuf(stdout).
问题标题表明原因:
(Interactive)
判断软件正在交互式运行程序。为程序提供输入后,它会等待输出,然后再提供更多输入。当你的程序没有刷新缓冲输出时,判断软件会一直等待,直到超过它的时间限制。
通常,到终端的输出流是 line-buffered,在这种情况下打印 new-line 字符会导致它们被刷新。然而,这个判断软件很可能使用了一个完全缓冲的管道,所以输出不会被刷新,直到缓冲区已满或者你明确请求刷新(或者,在程序开始时,你将缓冲模式更改为无缓冲或line-buffered).
当你刷新输出时,判断软件会看到它,然后它会继续并提供更多的输入。
作为在每个 printf
之后刷新输出的替代方法,您可以通过在程序开始时执行 setvbuf(stdout, NULL, _IOLBF, 0);
将流设置为行缓冲模式(在对流进行任何其他操作之前)流)。
如果未刷新标准输出,则以下代码将获得 TLE(超出时间限制)。
#include<stdio.h>
int main(){
int a;
while(1){
scanf("%d",&a);
printf("%d\n",a);
fflush(stdout);
if(a==42)
break;
}
return 0;
}
刷新输出缓冲区如何帮助克服 TLE?
这就是问题 link - https://www.spoj.com/problems/EXPECT/
问题说明告诉你该怎么做:
Attention: the program should clear the output buffer after printing each line.
It can be done using fflush(stdout) command or by setting the proper type of buffering at the beginning of the execution - setlinebuf(stdout).
问题标题表明原因:
(Interactive)
判断软件正在交互式运行程序。为程序提供输入后,它会等待输出,然后再提供更多输入。当你的程序没有刷新缓冲输出时,判断软件会一直等待,直到超过它的时间限制。
通常,到终端的输出流是 line-buffered,在这种情况下打印 new-line 字符会导致它们被刷新。然而,这个判断软件很可能使用了一个完全缓冲的管道,所以输出不会被刷新,直到缓冲区已满或者你明确请求刷新(或者,在程序开始时,你将缓冲模式更改为无缓冲或line-buffered).
当你刷新输出时,判断软件会看到它,然后它会继续并提供更多的输入。
作为在每个 printf
之后刷新输出的替代方法,您可以通过在程序开始时执行 setvbuf(stdout, NULL, _IOLBF, 0);
将流设置为行缓冲模式(在对流进行任何其他操作之前)流)。