签到题中夹带着贪心
考虑要尽可能把所有数变成正数。
若 \(n\) 为奇数,则一定可以变成全部正数,首先翻出 \(n\) 个负数,其他的下一次翻完。
若 \(n\) 为偶数,显然定有一个数还是负数,考虑最小的哪个。
代码如下:
#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;
}
标签:int,CF301A,Sol,minx,abs,include,rep
From: https://www.cnblogs.com/JacoAwA/p/CF301A.html