藍橋杯2019初賽 字尾表示式

2021-10-04 13:06:54 字數 1457 閱讀 2961

[藍橋杯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,是最大的。思路 讀完題後,覺...