SJTU OJ 1006 求和遊戲

2021-08-10 19:43:51 字數 1162 閱讀 9051

description

石柱上有一排石頭鍵盤,每個鍵上有乙個整數。請你在鍵盤上選擇兩個鍵,使這兩個鍵及其之間的鍵上的數字和最大。如果這個最大的和不為正,則輸出「game over」。

input format

第1行:鍵的個數n。

第2..n+1行:鍵上的數字整數 ai。

−100≤ai≤10

對於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

13sample input

3 -6

-9 -10

sample output

game over

這是leetcode上一道題的變形,那道題目是不同是連續數的個數至少為1,直接掃一遍就可以了。這道題目略麻煩一些,需要增加判斷連續子列長度是否至少為2。

思路是基於「前面掃過小於零就重置」的思想,再對特例進行處理。

#include

using

namespace

std;

int main();

int ans = -1;

bool f = false;

int last;

bool lastf = false;

while(n--) //由於可能出現 負數 + 正數為極大值的情況,所以對每乙個pair進行求和,lastf是為了避免第乙個數的情況

if(sum<0)

else f = true; //如果大於等於零就留下,繼續後掃

last = t;

lastf = true;

}cout

<<(ans<=0?"game over":to_string(ans));

}

sjtu oj 1006 求和遊戲

考慮到資料量,不可能建立等長的陣列 也沒有意義 需要做的只是記錄最小累計值 minn 並且每讀入乙個值 tem 就將目前的累計值 now 與最小值比較,更小則替代,答案 ans 取當前累計值與最小值的差值 考慮到題目要求,ans小於等於0時輸出game over 注意,以上變數都為long long...

1006 求和遊戲

石柱上有一排石頭鍵盤,每個鍵上有乙個整數。請你在鍵盤上選擇兩個鍵,使這兩個鍵及其之間的鍵上的數字和最大。如果這個最大的和不為正,則輸出 game over 第1行 鍵的個數n。第2.n 1行 鍵上的數字整數 ai ai。100 ai 100 100 ai 100 對於70 的資料,2 n 1,000...

1006 求和遊戲

這道題目和最大連續子串行不同的是,要求子串行至少包含兩個元素。用 sum i 表示sigma,即字首和 用 m i min m 0 0 這樣 sum i m i 2 就表示以 i 結尾的至少包含兩個元素的最大連續子串行和,所以問題可以表示為求 ans min 1 include 2 3 define...