0

Online Judges で高速な入出力を行うために、さまざまな言語でバッファを使用している人を見てきました。たとえば、この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 は組み込みルーチンを使用して整数を解析するか、速度が最適化されたある種のサードパーティ ライブラリを取得します。

于 2012-04-25T08:09:42.227 に答える
0

Python 3でこれを解決しようとしましたが、入力をどのように読み取ろうとしても機能しませんでした。次に、Python 2.5で実行するように切り替えて、使用できるようにしました。

import psyco
psyco.full()

sys.stdinその変更を行った後、forループで一度に1行から入力を読み取るだけで、それを機能させることができました。との値を使用して最初の行を読み取り、raw_input()解析してから、次のループを使用して残りの入力を読み取りました。nk

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