给你一个集合 S,其中包含了前 n 个正整数:1,2,…,n。
你可以对集合 S 执行以下操作任意次数(也可能是零次):
给你一个集合 T,它是集合 S 的一个子集。找出将 S 变为 T 所需要的操作的最低总代价。我们可以证明这样的变化总是可能的。
输入的第一行包含一个单独的整数 t(1≤t≤10000)—— 测试用例数量。然后是测试用例的描述。
每个测试用例的第一行包含一个正整数 n(1≤n≤106)。
每个测试用例的第二行包含一个长度为 n 的二进制字符串,描述集合 T。字符串的第 i 个字符如果为 '1',则表示数字 i 是集合 T 的元素,如果为 '0',则表示否。
保证所有测试用例的 n 之和不超过 106。
对于每个测试用例,输出一个非负整数 —— 将 S 变为 T 所需要的操作的最低总代价。
6
6
111111
7
1101001
4
0000
4
0010
8
10010101
15
110011100101100
0
11
4
4
17
60
在第一个测试用例中,我们不需要执行任何操作,因为 S 已经等于 T,即集合 {1,2,3,4,5,6}。
在第二个测试用例中,最初,S={1,2,3,4,5,6,7},和 T={1,2,4,7}。我们将执行如下操作:
总代价是 3+3+5=11。证明这是可能的最小代价。
在第三个测试用例中,最初,S={1,2,3,4} 和 T={}(空集)。我们将执行 k=1 的 4 次操作来删除 1、2、3 和 4。
在第四个测试用例中,最初,S={1,2,3,4} 和 T={3}。我们将执行两次 k=1 的操作来删除 1 和 2,然后执行 k=2 的一次操作来删除 4。