本题解同步发布于[本场总题解](https://www.luogu.org/blog/expect/CF580DIV2),欢迎来踩
B - Make Product Equal One
要让个数乘积为
,必须保证这个数列中只有
或者
,且
的个数为偶数个。
考虑贪心,设代表
变为
的代价,
代表
变为
的代价,优先选择小的一个,同时记录
,如果选择的是
,令计数器
如果为偶数,则直接输出答案
否则需要且仅需要将一个改为
或将一个
改为
。
对升序排序,答案加上
即可。
code:
#include<bits/stdc++.h>
using namespace std;
#define maxn 100005
#define int long long
int n,m;
int a[maxn];
int b[maxn];
int c[maxn];
int record[maxn],ans,cnt;
signed main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
b[i]=abs(1-a[i]);
c[i]=abs(-1-a[i]);
if(b[i]<=c[i]){
ans+=b[i];
record[i]=c[i]-b[i];
}
else{
ans+=c[i];cnt++;
record[i]=b[i]-c[i];
}
}
sort(record+1,record+n+1);
if(cnt%2==1) ans+=record[1];
cout<<ans<<endl;
return 0;
} 
京公网安备 11010502036488号