[藍橋杯2019初賽]字尾表示式思路:時間限制: 1 sec 記憶體限制: 256 mb
題目描述
給定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
0<=n,m<=100000,-109
<=ai<=109
輸出輸出乙個整數,代表答案。
樣例輸入
1 11 2 3
樣例輸出
4
如果有沒有負號,答案是每位數相加
如果有負號,但沒有負數,那麼和的最大值就是除了最小值之外,所有數的絕對值相加,然後減去最小值
例1:3 5
1 2 3 4 5 6 7 8 9
9 -((1 - 2 - 3 - 4 - 5)+ 6 + 7 + 8)
如果有負號且有負數,但(負數的個數)!=(n+m+1),那麼和的最大值是所有數的絕對值相加,
例1:3 59 8 7 6 -5 -4 -3 -2 -1
6-((-5 + -4 + -3 + -2 - 9 - 8 - 7)- (-1))
例2:5 39 8 7 6 -5 -4 -3 -2 -1
6 + 7 - ((-1 + -2 + -3 + -4 + -5)- 9 - 8 )
如果有負號且有負數,但(負數的個數)==(n+m+1),那麼和的最大值就是除最大值之外(因為全都是負數,即絕對值最小的那個數),所有數絕對值之和+最大值
例1:5 3-1 -( -2 + -3 + -4 + -5 + -6 + -7)- (-8)- (-9)
#include
using namespace std;
int a[
200010];
intmain()
sort
(a, a + n)
;//排序
if(m)
//判斷是否有負號,如果沒有負號,那麼最大值就是sum
}else
for(
int i =
0; i < z; i++)}
else
sum-=2
*a[0];
} cout << sum << endl;
return0;
}
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 ...
1467 藍橋杯2019初賽 字尾表示式
題目 給定n 個加號 m 個減號以及n m 1 個整數a1,a2,an m 1。小明想知道在所有由這n 個加號 m 個減號以及n m 1個整數湊出的合法的字尾表示式中,結果最大的是哪乙個?請你輸出這個最大的結果。例如使用1 2 3 則 2 3 1 這個字尾表示式結果是4,是最大的。思路 讀完題後,覺...