#P15184. [hacker2025R3]Bitstring Botcheck
[hacker2025R3]Bitstring Botcheck
题目描述
为了确保反抗军通信发生在人类之间,验证码难度被大幅提高。每个反抗军成员若想证明自己是人类并联系基地,就必须解决下面的谜题。
给定一个长度为 的二进制串 ,你需要用不超过 次如下操作,把它按非降序排序。
一次操作定义如下:
- 将下标集合 划分成两个升序数组 和 ,二者长度都为 。每个下标必须且只能被分配到 或 中之一。
- 对每个 ,交换 和 。
如果可以在不超过 次操作内将二进制串按非降序排序,请输出任意一种方案。若不可能,请输出 。
输入格式
输入第一行包含一个整数 ,表示测试用例数。
对于每个测试用例:
第一行包含一个整数 。
第二行包含长度为 的二进制串 。
输出格式
对于第 个测试用例:
若可以在不超过 次操作内排序,输出:
Case #i: M
其中 为操作次数,且 。
接下来输出 对行,共 行。每一对行表示一次操作:
- 第一行包含 个空格分隔的整数,表示数组 ;
- 第二行包含 个空格分隔的整数,表示数组 。
数组 与 都必须严格递增,并且共同构成 的一个划分。
若不能在不超过 次操作内排序,输出:
Case #i: -1
数据范围
样例输入
5
3
101000
3
101010
3
100100
3
011001
3
011010
样例输出
Case #1: 4
1 3 5
2 4 6
1 2 3
4 5 6
1 3 4
2 5 6
1 2 3
4 5 6
Case #2: 3
1 2 5
3 4 6
1 2 3
4 5 6
1 3 4
2 5 6
Case #3: 2
1 3 5
2 4 6
1 2 3
4 5 6
Case #4: 2
1 2 3
4 5 6
1 3 5
2 4 6
Case #5: 2
1 2 3
4 5 6
1 2 5
3 4 6
样例解释
第一个样例中,,,可以通过如下操作排序:
-
交换 与 中对应位置。被选入 的位置用方括号标出:
[1]0[1]0[0]0 -> 010100 -
交换 与 :
[0][1][0]100 -> 100010 -
交换 与 :
[1]0[0][0]10 -> 011000 -
交换 与 :
[0][1][1]000 -> 000011