题目描述
给定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
输出
输出一个整数,代表答案。
样例输入 Copy
1 1
1 2 3
样例输出 Copy
4
注意可能存在负数,所以要分开求
#include <iostream>
#include<algorithm>
using namespace std;
bool gcd(int a, int b)
{
return a > b;
}
int main()
{
int a[200005];
int n, m;
cin >> n >> m;
int cnt = 0;
long long ans = 0;
for (int i = 1; i <= n + m + 1; i++)
{
cin >> a[i];
ans += a[i];
if (a[i] < 0)
cnt++;
}
sort(a + 1, a + n + m + 2);
//cout << a[1] << endl;
if (m)
{
if (cnt)
{
if (cnt == n + m + 1)
{
for (int i = 1; i <= cnt - 1; i++)
{
ans -= 2 * a[i];
}
}
else
{
for (int i = 1; i <= cnt; i++)
{
ans -= 2 * a[i];
}
}
}
else
{
ans -= 2 * a[1];
}
}
cout << ans << endl;
}