CF2176B.Optimal Shifts

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

Optimal Shifts

题目描述

给定一个二进制字符串 s1s2sns_1s_2 \ldots s_n,其中至少包含一个 11。你需要将其变为同样长度且全部由 11 组成的二进制字符串。为此,你可以进行如下任意次操作:

选择一个整数 dd1dn1 \le d \le n),将字符串 ss 进行循环右移 dd 位得到新字符串 tt,形式化地表示为:t=snd+1sns1sndt = s_{n-d+1} \ldots s_{n} s_1 \ldots s_{n-d}。之后,对所有 jj 满足 tj=1t_j = 1,执行 sj:=1s_j := 1。该操作的花费为 dd 个金币。

注意,原本 sj=1s_j=1 的位置即便 tj=0t_j=0 也会维持为 11

请你计算将 ss 变为全是 11 的字符串所需的最小金币总数。

输入格式

每组测试数据包含多组用例。第一行输入测试用例组数 tt1t1041 \le t \le 10^4)。接下来每组测试用例如下:

每组测试用例的第一行输入整数 nn1n2×1051 \le n \le 2 \times 10^5),表示二进制字符串的长度。

第二行输入一个长度为 nn 的仅由 0011 组成的字符串。

保证每个字符串至少包含一个 11

保证所有用例中 nn 的总和不超过 2×1052\times10^5

输出格式

对于每个测试用例,输出一个整数,即将所有字符变为 11 所需的最小金币总数。

说明/提示

以第三组样例为例,s=s = "0110"。此时,最优方案是选择 d=2d = 2,则 t=t = "1001"。这样,第 j=1j = 1j=4j = 4 位置的 sjs_j 会被置为 11,最终字符串 ss 全部为 11。该操作花费 d=2d = 2

由 ChatGPT 5 翻译

样例

5
1
1
3
101
4
0110
11
10101010100
2
11
0
1
2
2
0

在线编程 IDE

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