CF1038D Slime 构造

题目大意:

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

输入格式:

第一行一个整数nnn

第二行nnn个整数,表示史莱姆的分数

输出格式:

一个整数,即最大分数

对于这道题来说,我们发现如果序列中有正有负,答案就是所有数的绝对值之和。 否则,答案就是绝对值之和减去绝对值中的最小值的 222 倍。

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;
}

  

原文地址:https://www.cnblogs.com/guangheli/p/9845108.html