Sol.CF301A

发布时间 2023-09-12 19:10:09作者: JacoAwA

签到题中夹带着贪心

考虑要尽可能把所有数变成正数。

\(n\) 为奇数,则一定可以变成全部正数,首先翻出 \(n\) 个负数,其他的下一次翻完。

\(n\) 为偶数,显然定有一个数还是负数,考虑最小的哪个。

Accept

代码如下:

#include<iostream>
#include<cmath>
#define rep(a,b,c) for(int a=b;a<=c;a++)
inline int read();
using namespace std;
int n,ans,minx=INT_MAX,cnt;
int main(){
	cin>>n;
	rep(i,1,2*n-1){
		int x=read();
		ans+=abs(x);
		minx=min(minx,abs(x));
		if(x<0)cnt++;
	}
	if((cnt%2==0&&n%2==0)||n%2==1)cout<<ans<<endl;
	else cout<<ans-minx*2;
	return 0;
}
int read(){
	int x=0,f=1;char c=getchar();
	while(c<'0'||c>'9'){if(c=='-') f=-1;c=getchar();}
	while(c>='0'&&c<='9')x=x*10+c-'0',c=getchar();
	return x*f;
}