藍橋杯 字尾表示式

2021-10-24 21:40:29 字數 1006 閱讀 6389

【問題描述】

給定 n 個加號、m 個減號以及 n + m + 1 個整數 a1, a2, ··· , an+m+1,小明想知道在所有由這 n 個加號、m 個減號以及 n + m +1 個整數湊出的合法的

字尾表示式中,結果最大的是哪乙個?

請你輸出這個最大的結果。

例如使用1 2 3 + -,則 「2 3 + 1 -」 這個字尾表示式結果是 4,是最大的。

【輸入格式】

第一行包含兩個整數 n 和 m。

第二行包含 n + m + 1 個整數 a1, a2, ··· , an+m+1。

【輸出格式】

輸出乙個整數,代表答案。

【樣例輸入】

1 11 2 3

【樣例輸出】

如果是中綴表示式,那麼加號就是加,減號就是減。但是字尾表示式可以通過加括號把減號變成加號,因此這道題可以理解為可以任意加括號的中綴表示式。

如果減號的個數為0,就直接把所有的數相加。如果減號的個數不為0,則最少有乙個減號,可以把其他的減號全都放進乙個括號裡,括號外只保留乙個減號。那麼就可以轉換為只做一次減法。要使字尾表示式值最大,則減去的那個數應該最小。

注意資料有負數,應該加上絕對值。另外不允許減號前面沒有數字,例如-(1-2-3),所以要用最大數減去最小數,再把其他數的絕對值加上。第一次做的時候沒有考慮到這一點,把最小數之後的所有數先加上,最後再減去最小數,如果資料全是負數的話就錯了,相當於在括號外只加了乙個負號,這種情況是不允許的。

#include

#include

#include

using

namespace std;

typedef

long

long ll;

const

int n =

200100

;ll a[n]

, res;

intmain()

else

cout

}

藍橋杯2019初賽 字尾表示式

藍橋杯2019初賽 字尾表示式 時間限制 1 sec 記憶體限制 256 mb 題目描述 給定n 個加號 m 個減號以及n m 1 個整數a1,a2,an m 1 小明想知道在所有由這n 個加號 m 個減號以及n m 1 個整數湊出的合法的字尾表示式中,結果最大的是哪乙個?請你輸出這個最大的結果。例...

2019藍橋杯初賽 字尾表示式

藍橋賽前練練手 字尾表示式可以模擬任意加括號的結果 所以相當於給出n個加號,m個減號,n m 1個數,用這些任意組成乙個式子,使結果最大 用大寫字母表示正數,小寫字母表示負數 最優的情況是n m 1個數中,有n 1個正數,有m個非正數 即構成a b c d a b c形式 結果就是絕對值之和 在此基...

藍橋杯 2019初賽 字尾表示式 思維

給定n 個加號 m 個減號以及n m 1 個整數a1,a2,an m 1 小明想知道在所有由這n 個加號 m 個減號以及n m 1 個整數湊出的合法的字尾表示式中,結果最大的是哪乙個?請你輸出這個最大的結果。例如使用1 2 3 則 2 3 1 這個字尾表示式結果是4,是最大的。第一行包含兩個整數n ...