思路
如果所有的数都是正数,那么我们可以用最小的数来减去其他的数,只留下一个正数来最后减去他们的和即可,如果全是负数,那么就找最大的数,来减去其他的负数,留下一个负数,让和来减去那个负数即可,如果有正有负,那么可以让负数减去周围的正数,只留下一个正数,最后减去所有剩下的负数即可
,n=1,2的时候特判。
代码
#include <bits/stdc++.h>
#define maxn 500005
#define ll long long
using namespace std;
int n;
ll a[maxn];
const int INF=0x3f3f3f3f;
int main()
{
scanf("%d",&n);
int flag = 0;
ll ans = 0;
ll Min = INF;
ll Max = -INF;
for(int i=0;i<n;i++){
scanf("%lld",&a[i]);
ans += abs(a[i]);
Min = min(Min, a[i]);
Max = max(Max, a[i]);
}
if(n == 1){
cout<<a[0]<<endl;
return 0;
}
if(n == 2){
cout<<max(a[0] - a[1],a[1] - a[0])<<endl;
return 0;
}
if(Min > 0) ans -= 2 * Min;
else if(Max < 0) ans -= 2 * abs(Max);
cout<<ans<<endl;
return 0;
}