题目大意:
有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;
- }