CF1038D Slime

题意:
有n只史莱姆,每只史莱姆有一个分数,每次一只史莱姆可以吞掉左边的或者右边的史莱姆(要是有的话),然后ta的分数会减去被吞的史莱姆的分数,问最后剩下的史莱姆分数最大为多少

思路:
三种情况:
如果全是正数 就将最小的数取负 其他全取正
如果全是负数 就将最大的数取正 其他全取负
如果有正有负 就取他们的绝对值之和

#include<bits/stdc++.h>
using namespace std; 
 
typedef long long ll;
const int maxn = 5e5+5;
int a[maxn];
ll sum = 0;

int main()
{
	
	int n;
	cin>>n;
	for(int i = 0; i < n; i++)
	{
		cin>>a[i];
		sum += abs(a[i]);
	}
	sort(a,a+n);
	if(n == 1)
	{
		cout<<a[0]<<endl;
	}
	else
	{
		if(a[0] > 0)
		{
			cout<<sum-2*a[0]<<endl;
		}
		else if(a[n-1] < 0)
		{
			cout<<sum+2*a[n-1]<<endl;
		}
		else cout<<sum<<endl;
	}
	return 0;
}


原文地址:https://www.cnblogs.com/tianming1/p/13603593.html