SJTUOJ 1006. 求和游戏

问题内容

Description
石柱上有一排石头键盘,每个键上有一个整数。请你在键盘上选择两个键,使这两个键及其之间的键上的数字和最大。如果这个最大的和不为正,则输出“Game Over"。

Input Format
第1行:键的个数n。

第2…n+1行:键上的数字整数 ai。

−100≤ai≤100
对于70%的数据,2≤n≤1,000
对于100%的数据,2≤n≤1,000,000
Output Format
一行,最大和或者”Game Over"。

Sample Input
5
3
-5
7
-2
8
Sample Output
13
Sample Input
3
-6
-9
-10
Sample Output
Game Over

代码实现及分析

又一题前缀和,需要注意的就是题目限制了间隔最小为2,Hint提到的增强可能就是值这样一组数据,不加这个限制会有一组数据WA。

#include <stdio.h>
int main()
{
    int curSum; // 当前最大序列前缀和
    int minSum; //当前最小前缀和
    int resultSum; //已知最大序列和,即curSum-minSum最大值   
    int input,n,pre;
    while(scanf("%d",&n)!=EOF)
    {
        scanf("%d",&input);
        minSum = 0;
        curSum = input;
        pre = input;
        resultSum = 0;
        n--;
        while(n--){
            scanf("%d",&input);
            curSum += input;
            resultSum = resultSum > (curSum-minSum) ? resultSum : (curSum - minSum);
            minSum = minSum < (curSum - input - pre) ? minSum : (curSum - input - pre);
            pre = input;
        }
        if(resultSum > 0){
            printf("%d\n",resultSum);
        }
        else{
            puts("Game Over");
        }
    }
    return 0;
}

时间:731ms 空间:9060kb

猜你喜欢

转载自blog.csdn.net/Phoenix5443/article/details/85037411
今日推荐