#1249. 鱼火相容
鱼火相容
给你一个二进制字符串 s,长度为 n。
您可以执行以下操作任意次数(可能为零):
选择一个整数 i(1 ≤ i ≤ n),并用 s1, s2, …, si 的 bitwise AND 或 bitwise OR 替换 si。
注意,单个元素的 bitwise AND 或 bitwise OR 等于元素本身。
您的目标是使 s 按非递减顺序排序。
求按非递减顺序对 s 排序所需的最少操作数。
- bitwise AND = 按位与。对二进制位逐位做“与”运算:只有两个位都是 1 时结果才是 1,否则是 0。
- bitwise OR = 按位或。对二进制位逐位做“或”运算:只要有一个位是 1,结果就是 1;两个都是 0 才是 0。
输入
第一行包含一个整数 t(1 ≤ t ≤ 10^4)——测试用例数。
每个测试用例的第一行包含一个整数 n(2 ≤ n ≤ 2·10^5)——二进制字符串 s 的长度。
第二行包含长度为 n 的二进制字符串 s。s 中的每个字符不是 0 就是 1。
保证所有测试用例中 n 的总和不超过 2·10^5。
输出
对于每个测试用例,打印一个整数——将 s 按非递减顺序排序所需的最少操作数。
样例
输入
6
4
0011
4
1000
5
01000
8
01001101
7
0101010
7
0111101
输出
0
3
1
2
3
1
注
在第一个测试用例中,字符串已经排序,因此无需进行任何操作。
在第二个测试用例中,我们可以使用位操作 OR 将最后三个字符改为 1,在 3 次操作中得到 1111。
注释
- 一个二进制字符串只包含字符 0 和 1。 † 如果 s 是非递减排序,那么 s1 ≤ s2 ≤ … ≤ sn。
统计
相关
在下列比赛中: