CF1277D.Let's Play the Words?
普及+/提高
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
Polycarp 有 n 个不同的二进制单词。一个单词被称为二进制单词,当且仅当它只包含字符 '0' 和 '1'。例如,“0001”、“11”、“0” 和 “0011100” 都是二进制单词。
Polycarp 想用他的 n 个二进制单词来玩一个叫做“单词接龙”的游戏。在这个游戏中,玩家依次说出单词,从第二个单词开始,每个单词都必须以前一个单词的最后一个字符开头。第一个单词可以任意选择。例如,以下单词序列可以在游戏中出现:“0101”、“1”、“10”、“00”、“00001”。
单词反转是指将单词中字符的顺序颠倒。例如,“0111” 反转后变为 “1110”,“11010” 反转后变为 “01011”。
可能 Polycarp 的单词集合无法按照游戏规则排列所有单词。在这种情况下,他希望反转集合中的一些单词,使得:
- 最终的 n 个单词仍然互不相同(即所有单词都是唯一的);
- 存在一种排列方式,使得所有单词按照游戏规则顺序排列。
Polycarp 希望反转的单词数尽可能少。请你帮他实现这个目标。
输入格式
输入的第一行包含一个整数 t(1≤t≤104),表示测试用例的数量。接下来有 t 组测试数据。
每组测试数据的第一行包含一个整数 n(1≤n≤2⋅105),表示 Polycarp 的单词数量。接下来的 n 行,每行一个单词。这些单词都非空,只包含字符 '0' 和 '1'。所有单词互不相同。
保证所有测试用例中 n 的总和不超过 2⋅105,所有单词长度的总和不超过 4⋅106。
输出格式
对于每个测试用例,按照输入顺序输出答案。
如果该测试用例无解,输出 −1。否则,第一行输出 k(0≤k≤n),表示需要反转的单词最少数量。第二行输出 k 个不同的整数,表示需要反转的单词在输入中的下标(单词按输入顺序从 1 到 n 编号)。如果 k=0,可以省略第二行(也可以输出一个空行)。如果有多种方案,输出任意一种即可。
输入输出样例
输入#1
4 4 0001 1000 0011 0111 3 010 101 0 2 00000 00001 4 01 001 0001 00001
输出#1
1 3 -1 0 2 1 2
说明/提示
由 ChatGPT 4.1 翻译
输入解题思路,AI测评打分。不知道怎么写?