0

これがSpoj 11373 に対する私の解決策です。コーラの狂気

#include <cstdio>

int main(){
    int T; scanf("%d",&T);

    for(int j = 1; j <= T; j++){
        int n;
        scanf("%d",&n);
        long long sum = 0, small = 0;
        int t;
        for(int i = 0; i < n; i++) {
            scanf("%d",&t);
            sum += t;
            if( sum < small) small = sum;
        }
        printf("Scenario #%d: %lld\n", j, -1*small+1);
    }
}

問題は簡単です。この解は Spoj では 0.12 秒かかりますが、0.01 秒の解もあります。このコードを高速化するためにどのような最適化を行うことができるか興味があります。ビット単位の操作を使用して取得できると思い-1*small+1ましたが、方法がわかりませんでした。また、合計がintを超える可能性があるため、long longを取り除くことはできません。

4

1 に答える 1

11

I/O 呼び出しが多すぎます。ファイル全体を一度に読み取り、解析してから出力を作成し、一度にすべて書き込みます。

于 2013-02-02T15:26:01.213 に答える