P14975 [USACO26JAN1] COW Splits B

题目描述

给定 Bessie 一个正整数 $N$ 和一个长度为 $3N$ 的字符串 $S$,该字符串是由 $N$ 个长度为 $3$ 的字符串拼接而成,每个字符串都是 $\texttt{COW}$ 的一个循环移位。换句话说,每个字符串将是 $\texttt{COW}$、$\texttt{OWC}$ 或 $\texttt{WCO}$ 中的一个。 字符串 $X$ 是一个**平方串**,当且仅当存在一个字符串 $Y$ 使得 $X = Y + Y$,其中 $+$ 表示字符串拼接。例如,$\texttt{COWCOW}$ 和 $\texttt{CC}$ 是平方串的例子,但 $\texttt{COWO}$ 和 $\texttt{OC}$ 不是。 在一次操作中,Bessie 可以从 $S$ 中移除任意一个子序列 $T$,其中 $T$ 是一个平方串。一个字符串的子序列是指通过从原字符串中删除若干(可以是零个)字符而得到的字符串。 你的任务是帮助 Bessie 判断是否可能将 $S$ 转化为空字符串。此外,如果可能,你必须提供一种实现方法。 Bessie 还会收到一个参数 $k$,其值为 $0$ 或 $1$。设 $M$ 为你构造方案中的操作次数。 - 如果 $k = 0$,则 $M$ 必须等于可能的最小操作次数。 - 如果 $k = 1$,则 $M$ 最多可以比可能的最小操作次数多 $1$。

输入格式

第一行包含 $T$,表示独立测试用例的数量($1\le T\le 10^4$),以及 $k$($0 \le k \le 1$)。 每个测试用例的第一行有 $N$($1 \le N \le 10^5$)。 每个测试用例的第二行有 $S$。 所有测试用例的 $N$ 之和不超过 $10^5$。

输出格式

对于每个测试用例,按照以下流程输出一行或两行。如果不可能将 $S$ 转化为空字符串,则在一行中输出 $-1$。 否则,在第一行输出 $M$——你构造方案中的操作次数。在第二行,输出 $3N$ 个由空格分隔的整数。第 $i$ 个整数 $x$ 表示 $S$ 的第 $i$ 个字母是在第 $x$ 次操作中被删除的($1 \le x \le M$)。

说明/提示

对于最后一个测试用例,最优的操作次数是 $2$,因此任何 $M=2$ 或 $M=3$ 的有效构造方案都会被接受。 对于 $M=3$,这里是一种可能的构造方案: 1. 在第一次操作中,移除最后 $12$ 个字符。现在剩下 $\texttt{COWCOW}$。 2. 在第二次操作中,移除子序列 `WW`。现在剩下 $\texttt{COCO}$。 3. 在最后一次操作中,移除所有剩余字符。 --- - 输入 $3$-$4$:$T \le 10, N \le 6, k = 0$ - 输入 $5$-$6$:$k = 1$ - 输入 $7$-$14$:$k = 0$ 翻译由 DeepSeek V3 完成