CF1276A As Simple as One and Two

题目描述

给定一个非空字符串 $s = s_1s_2\dots s_n$,该字符串仅由小写拉丁字母组成。如果字符串中包含至少一个子串 "one" 或至少一个子串 "two"(或同时包含两者),Polycarp 就不喜欢这个字符串。换句话说,如果存在整数 $j$($1 \le j \le n-2$),使得 $s_j s_{j+1} s_{j+2} = $ "one" 或 $s_j s_{j+1} s_{j+2} = $ "two",那么 Polycarp 就不喜欢字符串 $s$。 例如: - Polycarp 不喜欢字符串 "oneee"、"ontwow"、"twone" 和 "oneonetwo"(它们都至少包含一个子串 "one" 或 "two")。 - Polycarp 喜欢字符串 "oonnee"、"twwwo" 和 "twnoe"(它们都不包含子串 "one" 或 "two")。 Polycarp 想选择一组下标(位置),并删除这些位置上的所有字母。所有删除操作同时进行。 例如,如果字符串 $s = $ "onetwone",如果 Polycarp 选择下标 $3$ 和 $6$,则删除后字符串变为 "ontwne"。 请问,Polycarp 至少需要选择多少个下标,使得删除后字符串变为他喜欢的?这些下标分别是多少?

输入格式

输入的第一行包含一个整数 $t$($1 \le t \le 10^4$),表示测试用例的数量。接下来是 $t$ 个测试用例。 每个测试用例包含一个非空字符串 $s$。其长度不超过 $1.5 \times 10^5$。字符串 $s$ 仅由小写拉丁字母组成。 保证所有测试用例中所有字符串长度之和不超过 $1.5 \times 10^6$。

输出格式

对于每个测试用例,按输入顺序输出答案。 每个答案的第一行包含一个整数 $r$($0 \le r \le |s|$),表示需要删除的最少位置数,其中 $|s|$ 为给定字符串的长度。第二行输出 $r$ 个不同的整数,表示需要删除的下标,顺序任意。下标从左到右编号,从 $1$ 到字符串长度。如果 $r=0$,第二行可以省略(或输出为空)。如果有多种答案,输出任意一种均可。

说明/提示

在第一个示例中,答案为: - "onetwone", - "testme" —— Polycarp 喜欢,无需删除, - "oneoneone", - "twotwo"。 在第二个示例中,答案为: - "onetwonetwooneooonetwooo", - "two", - "one", - "twooooo", - "ttttwo", - "ttwwoo" —— Polycarp 喜欢,无需删除, - "ooone", - "onnne" —— Polycarp 喜欢,无需删除, - "oneeeee", - "oneeeeeeetwooooo"。 由 ChatGPT 4.1 翻译