题目大意:
有n只史莱姆qwq,每只史莱姆有一个分数,每次一只史莱姆可以吞掉左边的或者右边的史莱姆(要是有的话),然后ta的分数会减去被吞的史莱姆的分数,问最后剩下的史莱姆分数最大为多少
输入格式:
第一行一个整数n
第二行n个整数,表示史莱姆的分数
输出格式:
一个整数,即最大分数
对于这道题来说,我们发现如果序列中有正有负,答案就是所有数的绝对值之和。 否则,答案就是绝对值之和减去绝对值中的最小值的 2 倍。
Code:
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
long long minv = 1000000000000;
long long sumv = 0;
int positive, negative;
int main()
{
int n; scanf("%d",&n);
if(n == 1){ long long a; scanf("%lld",&a); printf("%lld",a); return 0;}
for(int i = 1;i <= n; ++i)
{
long long a; scanf("%lld",&a);
if(a > 0) ++positive;
if(a < 0) ++negative;
sumv += abs(a);
minv = min(minv, abs(a));
}
if(positive && negative) printf("%lld",sumv);
else printf("%lld",sumv - 2 *minv);
return 0;
}