使用缓冲区竞争编程的Python快速输入输出
我见过有人使用不同语言的缓冲区在网上快速输入/输出。例如,这是用C完成的,如下所示:使用缓冲区竞争编程的Python快速输入输出,python,performance,io,Python,Performance,Io,我见过有人使用不同语言的缓冲区在网上快速输入/输出。例如,这是用C完成的,如下所示: #include <stdio.h> #define size 50000 int main (void){ unsigned int n=0,k,t; char buff[size]; unsigned int divisible=0; int block_read=0; int j; t=0; scanf("%lu %lu\n",&t,&k); while(t){ b
#include <stdio.h>
#define size 50000
int main (void){
unsigned int n=0,k,t;
char buff[size];
unsigned int divisible=0;
int block_read=0;
int j;
t=0;
scanf("%lu %lu\n",&t,&k);
while(t){
block_read =fread(buff,1,size,stdin);
for(j=0;j<block_read;j++){
if(buff[j]=='\n'){
t--;
if(n%k==0){
divisible++;
}
n=0;
}
else{
n = n*10 + (buff[j] - '0');
}
}
}
printf("%d",divisible);
return 0;
#包括
#定义大小50000
内部主(空){
无符号整数n=0,k,t;
字符buff[大小];
无符号整除=0;
int block_read=0;
int j;
t=0;
scanf(“%lu%lu\n”、&t、&k);
while(t){
块读取=fread(buff,1,大小,标准输入);
对于(j=0;j
不过,这很可能不会提高性能–Python是解释语言,因此您基本上希望在本机代码(本例中为标准库输入/解析例程)上花费尽可能多的时间
TL;DR要么使用内置例程解析整数,要么获得某种第三方库,该库针对速度进行了优化。我尝试在Python 3中解决这个问题,但无论我如何读取输入,都无法使它工作。然后我切换到在Python 2.5下运行它,以便使用
import psyco
psyco.full()
在做了那个更改之后,我可以通过在for循环中一次读取一行来自sys.stdin
的输入来让它工作。我使用raw_input()
读取第一行,解析n
和k
的值,然后使用下面的循环读取其余的输入
for line in sys.stdin:
count += not int(line) % k
第三方图书馆将不会在在线评委中工作。不过,Thanx对此负责。
for line in sys.stdin:
count += not int(line) % k