CFCF2162B.Beautiful String
普及-
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
给定一个长度为 n 的二进制字符串 s。
你的任务是找到 s 的一个子序列 p,满足以下条件:
- 子序列 p 是非递减的。即 p 中每个字符都不大于其下一个字符。
- 设 x 表示从 s 中移除 p 的所有字符后(保持剩余字符的顺序)得到的字符串。则 x 必须是回文串。
你只需要输出任意一个满足条件的子序列 p。如果不存在这样的子序列,输出 −1。
注意,空串既是非递减的,也是回文串。
二进制串是只包含字符 ‘0’ 和 ‘1’ 的字符串。
字符串 s=s1s2…sn 的子序列是 p=si1si2…sik,其中 1≤i1<i2<…<ik≤n。字符按顺序选取,但不要求连续。空串也是任何字符串的子序列。
对于字符串 t=t1t2…tm,若对所有 1≤i≤m,都有 ti=tm−i+1,则 t 是回文串。也就是说,这个字符串从前往后和从后往前读相同。
输入格式
第一行包含一个整数 t(1≤t≤3000),表示测试用例的数量。
每个测试用例的第一行包含一个整数 n(1≤n≤10),表示字符串的长度。
第二行包含一个长度为 n 的二进制字符串 s。
输出格式
如果存在满足条件的解:
- 第一行输出一个整数 k(0≤k≤n),表示子序列 p 的长度。
- 第二行输出 k 个不同的整数 i1,i2,…,ik(1≤i1<i2<⋯<ik≤n),表示 s 中构成 p 的字符下标(按其在 s 中出现的顺序)。
否则,输出一行 −1。
输入输出样例
输入#1
5 3 010 3 001 5 00111 8 11010011 6 100101
输出#1
0 2 2 3 5 1 2 3 4 5 2 3 4 2 5 6
说明/提示
在第一个测试用例中,选择空子序列,得到 x=010,它是回文串。
在第二个测试用例中,移除 p=01(下标 2,3),剩下 x=0,它是回文串。
在第三个测试用例中,移除 p=00111(下标 1 到 5),剩下空串,空串本身是回文串。
在第四个测试用例中,移除 p=01(下标 3,4),剩下 x=110011,它是回文串。
在第五个测试用例中,移除 p=01(下标 5,6),剩下 x=1001,它是回文串。