问题内容
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