CF1594C Make Them Equal
题目描述
Theofanis 有一个字符串 $s_1 s_2 \dots s_n$ 和一个字符 $c$。他想通过最少的操作次数将字符串的所有字符都变为 $c$。
每次操作中,他可以选择一个数字 $x$($1 \le x \le n$),然后对于所有下标 $i$,如果 $i$ 不是 $x$ 的倍数,就将 $s_i$ 替换为 $c$。
请你求出将所有字符变为 $c$ 所需的最少操作次数,以及每次操作中应选择的 $x$。
输入格式
第一行包含一个整数 $t$($1 \le t \le 10^4$),表示测试用例的数量。
每个测试用例的第一行包含一个整数 $n$($3 \le n \le 3 \cdot 10^5$)和一个小写拉丁字母 $c$,分别表示字符串 $s$ 的长度和目标字符。
每个测试用例的第二行包含一个由小写拉丁字母组成的字符串 $s$,表示初始字符串。
保证所有测试用例中 $n$ 的总和不超过 $3 \cdot 10^5$。
输出格式
对于每个测试用例,首先输出一个整数 $m$,表示将所有字符变为 $c$ 所需的最少操作次数。
接下来输出 $m$ 个整数 $x_1, x_2, \dots, x_m$($1 \le x_j \le n$),表示每次操作中选择的 $x$,按顺序输出。
可以证明,在给定的约束下,总是存在解。如果有多种方案,输出任意一种均可。
说明/提示
我们以第三个测试用例为例进行说明:
1. $x_1 = 2$:选择所有不是 $2$ 的倍数的位置并替换,即 bzyx $\rightarrow$ bzbx;
2. $x_2 = 3$:选择所有不是 $3$ 的倍数的位置并替换,即 bzbx $\rightarrow$ bbbb。
由 ChatGPT 4.1 翻译