解题思路
这道题的解题思路比较简单,具体步骤如下:
-
读入测试数据的数量 tt,对于每组测试数据,读入物品数量 nn 和物品价值 a_1,a_2, \cdots, a_na1,a2,⋯,an。
-
统计价值为 00 的物品个数 zz,并计算物品的价值和 sumsum。如果序列中存在 00,则我们需要对所有的 00 进行一次操作,使得其变为 11,这样才能保证价值积不为 00。因此,我们至少需要进行 zz 次操作。
-
对于经过操作后的序列,统计其所有元素的和 sumsum。如果 sum \neq 0sum=0,则此时的序列已经满足题目要求,输出操作次数 zz 即可。
-
如果 sum = 0sum=0,则我们需要对任意一个 a_i > 0ai>0,并对其进行一次操作,使得其变为 a_i + 1ai+1,因为只要序列中存在正整数,我们就可以利用这些正整数来使得序列的价值积不为 00。如果序列中不存在 a_i > 0ai>0,则我们需要对任意一个元素进行一次操作,使得序列中至少有一个非 00 的元素,然后再按照上述方法进行操作。因此,此时的操作次数为 z + 1z+1。
python中for _ in range(10) 与 for i in range(10):
for _ in range(n) 一般仅仅用于循环n次,不用设置变量,用 _ 指代临时变量,只在这个语句中使用一次。
在循环中两者的作用相似。
t = int(input())
for _ in range(t):
n = int(input())
a = list(map(int, input().split()))
z = a.count(0)
sum_val = sum(a) + z
if sum_val == 0:
print(z + 1)
else:
print(z)