题目链接 52 pts,不知道哪错了,n=1 我也特判了。
#include<bits/stdc++.h>
#define int long long
#define PII pair< int, int >
using namespace std;
const int N = 1e6 + 5, mod = 998244353;
int T, n, a[N], sum, daan;
template< typename T >inline void read(T &x){bool f=1;x=0;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-') f=!f;ch=getchar();}while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}x=(f?x:-x);return;}
template< typename T, typename ... L > void read(T &a , L && ... b) { read(a); read(b ...); }
int ksm(int a, int b, int p){int ans = 1;while(b){if(b & 1)ans =(ans*a)%p;b >>= 1;a = (a*a) % p;}return ans;}
void solve(){
read(n);
sum = 0;
daan = 0;
for (int i = 1; i <= n; i++){
read(a[i]);
sum += abs(a[i]);
}
if (n == 1){
printf("%lld\n", a[1]);
return ;
}
for (int i = 1; i < n; i++){
if (a[i] < 0 && a[i+1] <= 0) daan = max(daan, sum + 2 * a[i]);
else if (a[i] >= 0 && a[i+1] > 0) daan = max(daan, sum - 2 * a[i+1]);
else if (a[i] < 0 && a[i+1] > 0) daan = max(daan, sum + 2 * a[i] - 2 * a[i+1]);
else daan = max(daan, sum);
}
if (a[n] < 0 && a[1] <= 0) daan = max(daan, sum + 2 * a[n]);
else if (a[n] >= 0 && a[1] > 0) daan = max(daan, sum - 2 * a[1]);
else if (a[n] < 0 && a[1] > 0) daan = max(daan, sum + 2 * a[n] - 2 * a[1]);
printf("%lld\n", daan);
}
signed main(){
// freopen("a.in", "r", stdin);
// freopen("a.out","w",stdout);
read(T);
while (T--) solve();
return 0;
}