0

我见过人们在在线评委中使用不同语言的缓冲区来快速输入/输出。例如,这个http://www.spoj.pl/problems/INTEST/是用 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){
    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;

这怎么能用python完成?

4

2 回答 2

1
import sys
file = sys.stdin
size = 50000
t = 0
while(t != 0)
    block_read = file.read(size)
    ...
...

不过,这很可能不会提高性能——Python 是解释型语言,因此您基本上希望在本机代码(在这种情况下为标准库输入/解析例程)花费尽可能多的时间。

TL;DR 要么使用内置例程来解析整数,要么获取某种针对速度进行了优化的第 3 方库。

于 2012-04-25T08:09:42.227 回答
0

我尝试在 Python 3 中解决这个问题,无论我如何尝试读取输入,都无法让它工作。然后我切换到在 Python 2.5 下运行它,这样我就可以使用

import psyco
psyco.full()

sys.stdin在进行更改后,我只需在 for 循环中一次读取一行的输入即可使其工作。raw_input()我使用and 的值读取并解析n了第一行k,然后使用以下循环读取输入的其余部分。

for line in sys.stdin:
    count += not int(line) % k
于 2012-07-07T19:10:44.080 回答