CF1678B1.Tokitsukaze and Good 01-String (easy version)

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

Tokitsukaze and Good 01-String (easy version)

题目描述

这是该问题的简单版本。两个版本的唯一区别在于,困难版本还要求最小化子段的数量。

Tokitsukaze 有一个长度为 nn 的二进制字符串 ss,只包含 0011,且 nn 是偶数。

现在,Tokitsukaze 将 ss 划分为最少数量的连续子段,并且每个子段内的所有位都相同。之后,如果所有子段的长度都是偶数,则称 ss 是好的。

例如,如果 ss 为 "11001111",它会被划分为 "11"、"00" 和 "1111"。它们的长度分别为 222244,都是偶数,因此 "11001111" 是好的。再比如,如果 ss 为 "1110011000",它会被划分为 "111"、"00"、"11" 和 "000",它们的长度分别为 33222233。显然,"1110011000" 不是好的。

Tokitsukaze 想通过修改 ss 中某些位置的值,使 ss 变成好的。具体来说,她可以进行任意次数的操作:将 sis_i 的值改为 '0' 或 '1'(1in1 \leq i \leq n)。你能告诉她最少需要多少次操作才能使 ss 变成好的吗?

输入格式

第一行包含一个正整数 tt1t100001 \leq t \leq 10\,000),表示测试用例的数量。

对于每个测试用例,第一行包含一个整数 nn2n21052 \leq n \leq 2 \cdot 10^5),表示字符串 ss 的长度,保证 nn 是偶数。

第二行包含一个长度为 nn 的二进制字符串 ss,只包含 0011

保证所有测试用例中 nn 的总和不超过 21052 \cdot 10^5

输出格式

对于每个测试用例,输出一行一个整数,表示将 ss 变成好的所需的最小操作次数。

说明/提示

在第一个测试用例中,将 s3s_3s6s_6s7s_7 改为 '0',此时 ss 变为 "1100000000",可以划分为 "11" 和 "00000000",长度分别为 2288。还有其他操作 33 次使 ss 变好的方法,例如 "1111110000"、"1100001100"、"1111001100"。

在第二、第三和第四个测试用例中,ss 一开始就是好的,因此不需要任何操作。

由 ChatGPT 4.1 翻译

样例

5
10
1110011000
8
11001111
2
00
2
11
6
100110
3
0
0
0
3

在线编程 IDE

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