1. 程式人生 > >codeforces round 508(div2) D. Slime

codeforces round 508(div2) D. Slime

這道題的核心規律就是,一串數字,裡面有正有負,他們最後能達到的值可以是絕對值之和,也可以是負的絕對值之和。

如果只有正數或者只有負數,那就要減掉兩倍最小值。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int INF=1e9+7;
int a[500010];
int main()
{
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
       scanf("%d",&a[i]);
    if
(n==1) { printf("%d\n",a[1]); return 0; } int pos=0,neg=0; for(int i=1;i<=n;i++) { if(a[i]>=0) pos++; else neg++; } if(pos==n) { ll res=0; int mina=INF; for(int i=1;i<=n;i++) { mina
=min(a[i],mina); res+=a[i]; } res-=2*mina; printf("%lld\n",res); return 0; } else if(neg==n) { ll res=0; for(int i=1;i<=n;i++) { a[i]=-a[i]; } int mina=INF; for(int i=1;i<=n;i++) { mina
=min(a[i],mina); res+=a[i]; } res-=2*mina; printf("%lld\n",res); return 0; } else { ll res=0; for(int i=1;i<=n;i++) res+=abs(a[i]); printf("%lld\n",res); return 0; } }