欢迎光临散文网 会员登陆 & 注册

【蓝桥杯学习记录】后缀表达式(求最大)

2022-03-27 18:43 作者:长舟泛歌  | 我要投稿

一、题目

给定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即没有减号的情况,这样只要将所有数加起来就行了

第二种情况是符号有加有减,这时我们要求最大可以将最大的数放在括号外面,最小的数和某些数放在括号里面(最小的数要在括号的最前面,保证括号去掉之后最小的数是减去的,其余数是加的),然后减去这个括号。其余的正数加在括号外面,负数可以加在括号里,如果加号不够了,负数可以通过减号变成整数(如果加号不够负数加在括号里面,那么肯定有剩余的减号,反之减号不够,加号肯定多,最终都能保证负数取绝对值之后加上去)。此时最小的数一定是要被减去的(不管正负)。

综合起来第二种情况就是最大的数要不变的加在表达式里面,最小的数一定是减去的。其余数都可以通过括号或者正数加,负数减操作变为正数加在表达式里面,即其余数取绝对值加起来。

三、完整代码

四、出现问题

开始的时候没有想到括号和正负数的问题,对后缀表达式还是不太了解

【蓝桥杯学习记录】后缀表达式(求最大)的评论 (共 条)

分享到微博请遵守国家法律