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
#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;
}