时间限制: 1Sec 内存限制: 128MB 提交: 4110 解决: 669
题目描述
给定 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 1 1 2 3
样例输出复制
4
后缀表达式只是正常式子的一种形式,所以直接当成正常的中缀表达式
如果全是正好直接求和;
有负号的话 绝对会有一个数不能转化符号,也有一个数必须被减去,但其他数都可以转化为绝对值,直接加上最大的数,减去最小的数,加上中间数的绝对值即可。
#include<bits/stdc++.h>
using namespace std;
int n,m;
long long sum=0;
int a[300000];
int main()
{
cin>>n>>m;
int z=n+m+1;
for(int i=1;i<=z;i++)
{
cin>>a[i];
}
sort(a+1,a+z+1);
if(m==0)
{
for(int i=1;i<=z;i++)
{
sum+=a[i];
}
}
else
{
sum=a[z]-a[1];
for(int i=2;i<z;i++)
{
sum+=abs(a[i]);
}
}
cout<<sum;
return 0;
}