藍橋杯2019年真題:字尾表示式
題目
時間限制: 1.0s 記憶體限制: 512.0MB 本題總分:25 分
【問題描述】
給定 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 1 1 2 3
【樣例輸出】
4
【評測用例規模與約定】
對於所有評測用例,0≤ N,M ≤100000,−109 ≤ Ai ≤109。
答案
這道題的第一個坑,可能你們不知道字尾表示式的定義是什麼.
字尾表示式是運算子位於運算元之後,計算機從左到右掃描表示式,
遇到數字就直接入棧,遇到運算子就彈出棧頂兩個數進行計算,
將結果壓入數棧,一直重複得到結果
具體的可以看這篇文章
知道通過了第一個坑還有可能進入第二個坑,你有可能在想,將這些數字按照從小到大
進行排序,然後用所有的加號將大的數值加起來,然後將所有小的數值減了,
因為你覺得這道題沒有括號和優先順序之類的
但是這樣又錯了
字尾表示式是本來沒有括號但是又有優先順序的表示式,比如:
+,+,-,-,1,2,3,4,5
如果是5+4+3-2-1=9
如果是字尾表示式5 4 3 + + 1 2 - - =13
對應中綴表示式5+4+3-(1-2)=13
所以這道題加上了字尾表示式就是有優先順序的了
現在就是這道題所有的數中有正有負
如果所有都是正數,我們可以使用一個減號將其他的減號變成加號,有多少個減號
就將多少個減號放在括號裡面讓它變成加號,所以結果就是:
除了最小的數,所有的數加起來減去最小的數,就是
A+(B+C)-D
如果都是負數,就用加號的全部放在括號中讓他變成正數,所以結果就是:
除了最大的數,其他的都是可以變成正數,可以改成
A+(B+C)-D
如果有正有負有,也是將負的全部變成正數,減號不夠就用括號括起來再減
所以還是全部的絕對值加起來減去一個絕對值最小的
A+(B+C)-D
上面的(B+C)就是無論正負都可以變成正數的數,
上面所有的分類都是所有的數加起來,然後減去最小的,因為想將負數變成正數,必須
用減號來將它改成正數,但是最開始那個被減數就不能弄成正的
package competition3;
import java.util.Scanner;
public class ExpressionOfMy
{
public static int N,M;
public static int[] number;
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
N=in.nextInt();
M=in.nextInt();
number=new int[N+M+1];
int min=0,max=0;
for(int x=0;x<number.length;x++)
{
number[x]=in.nextInt();
if(number[min]>number[x])
{
min=x;
}
if(number[max]<number[x])
{
max=x;
}
}
long sum=0;
if(M==0)
{
for(int x=0;x<number.length;x++)
{
sum +=number[x];
}
System.out.println(sum);
}
else
{
for(int x=0;x<number.length;x++)
{
sum +=Math.abs(number[x]);
}
sum=(sum-Math.abs(number[max])-Math.abs(number[min]))+(number[max]-number[min]);
System.out.println(sum);
}
in.close();
}
}
相關文章
- [藍橋杯 2019 省 B] 字尾表示式
- 藍橋杯真題
- 2013年藍橋杯真題
- 藍橋杯刷題-乘積尾零
- 藍橋杯真題:純質數
- 藍橋杯省賽真題2013題解
- 藍橋杯真題之錯誤票據
- 藍橋杯15年真題奇妙的數字暴力集合去重
- [藍橋杯][2016年第七屆真題]冰雹數
- 藍橋杯-座次問題
- 藍橋杯-日期問題
- 藍橋杯
- [藍橋杯][2014年第五屆真題]地宮取寶
- [藍橋杯][2015年第六屆真題] 移動距離
- 藍橋杯全排列專題
- 題目 1841: [藍橋杯][2017年第八屆真題]發現環
- 中綴表示式轉字尾表示式
- 2015年藍橋杯六屆省賽大學B組真題
- 2020藍橋杯省賽B組C++(第二場)真題C++
- 前中字尾表示式
- 藍橋杯例題-快速分揀
- 藍橋杯題目編號1265
- 藍橋杯嵌入式之點燈
- 藍橋杯 2014屆真題 地宮取寶 動態規劃解法動態規劃
- 藍橋杯模擬題——長草問題
- 【題解】爬山 藍橋杯2024省B
- 【藍橋杯】練習題目彙總
- 2013藍橋杯題解c++A組C++
- Java藍橋杯14年第五題Java
- 藍橋杯 買瓜
- 藍橋杯-分巧克力
- 藍橋杯-N皇后
- 藍橋杯 剪格子
- 【資料結構與演算法】中綴表示式轉字尾表示式以及字尾表示式的計算資料結構演算法
- 2013藍橋杯題解c組C++C++
- 藍橋杯練習系統題目集
- 棧的應用---字尾表示式
- 藍橋杯-長草(BFS)