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 翻译