题意补充
查看原帖
题意补充
1274219
TCTM_temp楼主2024/7/23 18:25

移除最小倍数

题目描述

给你一个集合 SS,其中包含了前 nn 个正整数:1,2,…,n1, 2, \ldots, n。

你可以对集合 SS 执行以下操作任意次数(也可能是零次):

  • 选择一个正整数 kk,满足 1≤k≤n1 \le k \le n,并且在集合 SS 中存在 kk 的一个倍数。然后,从集合 SS 中删除 kk 的最小倍数。这个操作需要 kk 的代价。

给你一个集合 TT,它是集合 SS 的一个子集。找出将 SS 变为 TT 所需要的操作的最低总代价。我们可以证明这样的变化总是可能的。

输入格式

输入的第一行包含一个单独的整数 tt(1≤t≤10 0001 \le t \le 10\,000)—— 测试用例数量。然后是测试用例的描述。

每个测试用例的第一行包含一个正整数 nn(1≤n≤1061 \le n \le 10^6)。

每个测试用例的第二行包含一个长度为 nn 的二进制字符串,描述集合 TT。字符串的第 ii 个字符如果为 '1',则表示数字 ii 是集合 TT 的元素,如果为 '0',则表示否。

保证所有测试用例的 nn 之和不超过 10610^6。

输出格式

对于每个测试用例,输出一个非负整数 —— 将 SS 变为 TT 所需要的操作的最低总代价。

样例 #1

样例输入 #1

6
6
111111
7
1101001
4
0000
4
0010
8
10010101
15
110011100101100

样例输出 #1

0
11
4
4
17
60

提示

在第一个测试用例中,我们不需要执行任何操作,因为 SS 已经等于 TT,即集合 {1,2,3,4,5,6}\{1, 2, 3, 4, 5, 6\}。

在第二个测试用例中,最初,S={1,2,3,4,5,6,7}S = \{1, 2, 3, 4, 5, 6, 7\},和 T={1,2,4,7}T = \{1, 2, 4, 7\}。我们将执行如下操作:

  1. 选择 k=3k=3,然后从 SS 中删除 33。
  2. 选择 k=3k=3,然后从 SS 中删除 66。
  3. 选择 k=5k=5,然后从 SS 中删除 55。

总代价是 3+3+5=113+3+5 = 11。证明这是可能的最小代价。

在第三个测试用例中,最初,S={1,2,3,4}S = \{1, 2, 3, 4\} 和 T={}T = \{\}(空集)。我们将执行 k=1k=1 的 44 次操作来删除 11、22、33 和 44。

在第四个测试用例中,最初,S={1,2,3,4}S = \{1, 2, 3, 4\} 和 T={3}T = \{3\}。我们将执行两次 k=1k=1 的操作来删除 11 和 22,然后执行 k=2k=2 的一次操作来删除 44。

2024/7/23 18:25
加载中...