CF1605B.Reverse Sort

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

Reverse Sort

题目描述

题目共给出 t(1t1000)t(1 \le t \le 1000) 组数据,每组数据包含一个正整数 n(1n1000)n(1 \le n \le 1000) 和一个长度为 nn0101ss, 现在你需要在 ss 中选出一个子序列,将这个子序列中的字符翻转(如字符串 1010010100, 选出子序列 11001100, 翻转得到 00110011, 放回原串中得到 0001100011),使得翻转后的字符串字典序最小。

输入格式

第一行一个 tt, 表示样例组数。

每组一个正整数 tt 和一个字符串 ss, 表示字符串的长度和你将要进行操作的字符串。

输出格式

对于每组数据,第一行输出需要操作的次数(一次提取和一次翻转总称为一次操作,若不需修改则输出 00,详见样例),若操作次数不为零,则在第二行输出:

第一个数字 kk,表示需要提取出来的数字个数,后 kk 个数字,表示提取出来的数字在原串中的位置(下标 + 1)

样例解释:

对于第一组样例,不需要进行任何操作,本身字典序最小,输出 00

对于第二组样例,需要进行一次操作,即将 1010010100 中的 11001100 提取出来翻转,原串变为 0001100011

对于第三组样例,需要进行一次操作,即将 001000001000 中的 100100 提取出来翻转,原串变为 000001000001

样例

3
7
0011111
5
10100
6
001000
0
1
4 1 3 4 5 
1
3 3 5 6 

在线编程 IDE

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