题解 CF1206B 【Make Product Equal One】

引领天下

2019-08-19 14:48:43

Solution

这个题实际上就是一个不是很裸的贪心 ~~然而我比赛时还是WA了2次~~ 这个首先要注意的是,要开long long; 至于思路,很明显,<0的我们全部改成-1,>0的全部改成1,0统计数量,最后把所有的±1乘起来,如果有0的话则是不用管是不是1的,因为可以通过修改一个0来达到把-1变成1;否则的话要把其中一个-1变为1,即再加上2的答案。 代码: ```cpp #include<bits/stdc++.h> using namespace std; int n,s=1,cntz; long long ans,a[100005]; int main(){ ios::sync_with_stdio(false); cin.tie(0); cin>>n; for (int i=1;i<=n;i++){ cin>>a[i]; if(a[i]<0)ans+=-1-a[i],a[i]=-1;//<0的变成-1 else if(a[i]==0)ans++;//=0的肯定是要动1次的 else ans+=a[i]-1,a[i]=1;//>0的改成1 } for (int i=1;i<=n;i++)if(a[i])s*=a[i];else cntz++;//统计乘积和0的个数 if(s==-1&&!cntz)ans+=2;//如果乘起来是-1,又没有可以动手脚的0,则要把其中一个-1改为1,再额外加上2 cout<<ans; } ```