题目大意:给出n个数,每次可以取出两个数x和y(两个数从数组中删除),生成一个新数x-y放入原数组,求最后产生的最大值(总体大概是这个意思)
题目链接:http://codeforces.com/contest/1038/problem/D
思路:分成三种情况,如果n个数都是负数,则答案为最大数以外的所有数之和加最大数,如果n个数都是正数,最答案为除去最小数以外的所有数之和减去最小数,如果有正数有负数,答案为所有数的绝对值之和
c++代码:
#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;
const int maxn=500005;
int a[maxn];
int main() {
int n;
cin >>n;
int flag=0;
long long mmin=1e18,mmax=-1e17,sum=0;
for(int i=0;i<n;i++){
cin >> a[i];
sum+=abs(a[i]);
if(mmax<=a[i])mmax=a[i];
if(mmin>=a[i])mmin=a[i];
}
//cout << flag <<endl;
//cout << suma <<" " <<mmax <<endl;
if(n>1) {
if(mmin>=0)cout <<sum-2*mmin<<endl;
else if(mmax<=0)cout <<sum+2*mmax <<endl;
else if(mmax>0&&mmin<0)cout << sum <<endl;
}
else cout << a[0] <<endl;
return 0;
}