【蓝桥杯学习记录】后缀表达式(求最大)
一、题目
给定N个加号、M个减号以及N+M+1个整数A1,A2,.… ,AN+M+1,小明想知道在所有由这N个加号、M个减号以及N+M+1个整数凑出的合法的后缀表达式中,结果最大的是哪一个?请你输出这个最大的结果。
例如使用123+-,则"23+1-"这个后缀表达式结果是4,是最大的。
第一行包含两个整数N, M。
第二行包含N+M+1个整数A1,A2, . ,A(N+M+1)o
其中,0<=N ,M <=10^5,―10^9<=Ai ≤10^9。
二、解题思路
后缀表达式求最大其实就是中缀表达式求最大,但是后缀表达式无括号,中缀表达式有括号,所以经过括号前面加符号,可以将符号变为正号。
一共有两种情况:
首先是M=0即没有减号的情况,这样只要将所有数加起来就行了
第二种情况是符号有加有减,这时我们要求最大可以将最大的数放在括号外面,最小的数和某些数放在括号里面(最小的数要在括号的最前面,保证括号去掉之后最小的数是减去的,其余数是加的),然后减去这个括号。其余的正数加在括号外面,负数可以加在括号里,如果加号不够了,负数可以通过减号变成整数(如果加号不够负数加在括号里面,那么肯定有剩余的减号,反之减号不够,加号肯定多,最终都能保证负数取绝对值之后加上去)。此时最小的数一定是要被减去的(不管正负)。
综合起来第二种情况就是最大的数要不变的加在表达式里面,最小的数一定是减去的。其余数都可以通过括号或者正数加,负数减操作变为正数加在表达式里面,即其余数取绝对值加起来。
三、完整代码
四、出现问题
开始的时候没有想到括号和正负数的问题,对后缀表达式还是不太了解