CF1834A.Unit Array

传统题 时间 2000 ms 内存 256 MiB 3 尝试 1 已通过 1 标签

Unit Array

题目描述

给定一个长度为 nn 的数组 aa,其中每个元素均为 1-111。我们称数组 aa 为“好数组”,当且仅当同时满足以下两个条件:

  • a1+a2++an0a_1 + a_2 + \ldots + a_n \ge 0
  • a1a2an=1a_1 \cdot a_2 \cdot \ldots \cdot a_n = 1

每次操作,你可以选择数组中的任意一个元素 aia_i,并将其值变为相反数。也就是说,如果 ai=1a_i = -1,你可以将其赋值为 ai:=1a_i := 1;如果 ai=1a_i = 1,则可以赋值为 ai:=1a_i := -1

请你计算,最少需要进行多少次操作,才能使数组 aa 变为“好数组”。可以证明,总是存在一种方案使得数组 aa 变为“好数组”。

输入格式

每组测试数据包含多个测试用例。第一行包含一个整数 tt1t5001 \le t \le 500),表示测试用例的数量。接下来是每个测试用例的描述。

每个测试用例的第一行包含一个整数 nn1n1001 \le n \le 100),表示数组 aa 的长度。

每个测试用例的第二行包含 nn 个整数 a1,a2,,ana_1, a_2, \ldots, a_nai=±1a_i = \pm 1),表示数组 aa 的元素。

输出格式

对于每个测试用例,输出一个整数,表示将数组 aa 变为“好数组”所需的最小操作次数。

说明/提示

在第一个测试用例中,我们可以将 a1:=1a_1 := 1。此时 $a_1 + a_2 + a_3 + a_4 = 1 + (-1) + 1 + (-1) = 0 \ge 0$,且 $a_1 \cdot a_2 \cdot a_3 \cdot a_4 = 1 \cdot (-1) \cdot 1 \cdot (-1) = 1$。因此,我们共进行了 11 次操作。

在第二个测试用例中,我们可以将 a1:=1a_1 := 1。此时 $a_1 + a_2 + a_3 + a_4 + a_5 = 1 + (-1) + (-1) + 1 + 1 = 1 \ge 0$,且 $a_1 \cdot a_2 \cdot a_3 \cdot a_4 \cdot a_5 = 1 \cdot (-1) \cdot (-1) \cdot 1 \cdot 1 = 1$。因此,我们共进行了 11 次操作。

在第三个测试用例中,$a_1 + a_2 + a_3 + a_4 = (-1) + 1 + (-1) + 1 = 0 \ge 0$,且 $a_1 \cdot a_2 \cdot a_3 \cdot a_4 = (-1) \cdot 1 \cdot (-1) \cdot 1 = 1$。因此,所有条件都已满足,无需进行任何操作。

在第四个测试用例中,我们可以将 a1:=1,a2:=1,a3:=1a_1 := 1, a_2 := 1, a_3 := 1。此时 a1+a2+a3=1+1+1=30a_1 + a_2 + a_3 = 1 + 1 + 1 = 3 \ge 0,且 a1a2a3=111=1a_1 \cdot a_2 \cdot a_3 = 1 \cdot 1 \cdot 1 = 1。因此,我们共进行了 33 次操作。

由 ChatGPT 4.1 翻译

样例

7
4
-1 -1 1 -1
5
-1 -1 -1 1 1
4
-1 1 -1 1
3
-1 -1 -1
5
1 1 1 1 1
1
-1
2
-1 -1
1
1
0
3
0
1
2

在线编程 IDE

建议全屏模式获得最佳体验