这个题实际上就是一个不是很裸的贪心
然而我比赛时还是WA了2次
这个首先要注意的是,要开long long;
至于思路,很明显,<0的我们全部改成-1,>0的全部改成1,0统计数量,最后把所有的±1乘起来,如果有0的话则是不用管是不是1的,因为可以通过修改一个0来达到把-1变成1;否则的话要把其中一个-1变为1,即再加上2的答案。
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| #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; else if(a[i]==0)ans++; else ans+=a[i]-1,a[i]=1; } for (int i=1;i<=n;i++)if(a[i])s*=a[i];else cntz++; if(s==-1&&!cntz)ans+=2; cout<<ans; }
|