P9852 求助
  • 板块灌水区
  • 楼主Guoguo2013
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/12/10 22:54
  • 上次更新2024/12/11 16:22:18
查看原帖
P9852 求助
1070982
Guoguo2013楼主2024/12/10 22:54

题目链接 52 pts,不知道哪错了,n=1n = 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;
}
2024/12/10 22:54
加载中...