1. 后缀表达式
首先要了解什么是后缀表达式:
后缀表达式,指的是不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行(不再考虑运算符的优先规则)。
由于后缀表达式的运算符在两个操作数的后面,那么计算机在解析后缀表达式的时候,只需要从左向右扫描,也就是只需要向前扫描,而不用回头扫描,遇到运算符就将运算符放在前面两个操作符的中间(这里先不考虑乘方类似的单目运算),一直运算到最右边的运算符,那么就得出运算结果了。
后缀表达式是为了方标计算机运算,也就是隐式的含有小括号的一种表达式。有了小括号和减号,我们就可以把加号变成减号,减号变成加号。
对于本题,n个加号,m个减号。
如果m=0,就对所有的数相加即可得到最终结果。
如果m>0,就把数分成三类:
数据全为正:就把最小的那个数减掉,其他剩余的数加上就是最后结果。
数据全为负:就把最大的那个数加上,其他剩下的数减掉(也就是加上绝对值),就是最后结果。
数据有负有正:最后结果就是所有数的绝对值相加。
代码:
n,m=map(int,input().split())
nums=list(map(int,input().split()))
nums.sort()
if m==0:
result=sum(nums)
else:
if nums[0]>0:
result=sum(nums[1:len(nums)])-nums[0]
elif nums[-1]<0:
result=sum(nums[0:len(nums)-1])*(-1)+nums[-1]
else:
absnums=[abs(x) for x in nums]
result=sum(absnums)
print(result)