【题解】Make Product Equal One
本题解同步发布于[本场总题解](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; }