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可能会使用按位运算,但没有找到方法。我也无法摆脱 long long 因为 sum 可能超过 int。

4

1 回答 1

11

你进行了太多的 I/O 调用。一次读取整个文件,然后解析它,然后创建输出,然后一次全部写入。

于 2013-02-02T15:26:01.213 回答