https://vjudge.net/problem/CodeForces-1300A
题目大意:给一个有
n
n
n个元素的数组
a
a
a,每次操作可使
a
i
=
a
i
+
1
a_i=a_i+1
ai=ai+1,问最少经过多少次操作可以使
∑
a
i
!
=
0
\sum a_i\ !=0
∑ai !=0且
a
1
∗
…
…
∗
a
n
!
=
0
a_1*……*a_n\ !=0
a1∗……∗an !=0。
思路:遍历一遍同时记录元素之和,设为 s u m sum sum,以及 a i = 0 a_i=0 ai=0的个数,设为 c n t cnt cnt,分类讨论即可,详见代码。
#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
int n;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
int sum=0,cnt=0,ans=0,v;
for(int i=0;i<n;i++)
{
scanf("%d",&v);
sum+=v;
if(v==0)
++cnt;
}
if(!cnt&&sum)
printf("0\n");
else
{
if(cnt)
ans=cnt,sum+=cnt;
if(!sum)
++ans;
printf("%d\n",ans);
}
}
return 0;
}