CFCF2176B.Optimal Shifts

普及-

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

给定一个二进制字符串 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 所需的最小金币总数。

输入输出样例

  • 输入#1

    5
    1
    1
    3
    101
    4
    0110
    11
    10101010100
    2
    11

    输出#1

    0
    1
    2
    2
    0

说明/提示

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

首页