1と2のような単純な

TEST3秒あたりの制限時間
test256メガバイトあたりのメモリ制限
標準入力:入力
出力:標準出力

あなたは与えられているだけ小文字のラテン文字で構成され、空でない文字列s = S1S2 ... Snと。それは部分文字列として少なくとも1つの文字列「1」または少なくとも1つの文字列「2」(または同時に両方)が含まれている場合のpolycarpは、文字列好きではありません。整数j(1≤j≤n-2)、そのsjsj + 1sj + 2 =「1」又はsjsj + 1sj + 2 =「2」がある言い換えれば、のpolycarpは、文字列sを好きではありません。
例えば:
(彼らはすべての少なくとも一つのサブストリング「1」または「2」を持っている)「oneonetwo」のpolycarpは、文字列「oneee」、「ontwow」、「twone」と同様に、しない
のpolycarpは、「twwwo」と「twnoeを文字列「oonneeを」好き」(1 『と『2』彼らは部分文字列を持っていません』)。
polycarpは、インデックス(位置)の特定のセットを選択し、これらの位置のすべての文字を削除したいです。削除はすべて同時に行われています。
例えば、文字列sのように見える=「onetwone」場合、のpolycarp選択する2つのインデックス3,6場合、「onetwone」が選択され、その結果が「ontwne」です。
polycarpは、文字列が気に入っにするために選択する必要があることをインデックス(位置)の最小数は何ですか?これらの位置は何をすべきですか?

入力
入力のテストケースの数-入力の最初の行は整数t(1≤t≤104)を含みます。次に、テストケースが与えられています。
各テストケースは、一つの非空の文字列sから構成されています。その長さは1.5⋅105を超えてはなりません。文字列sは小文字のみラテン文字で構成されています。
テスト中のすべての入力データのためのすべての線の長さの合計が1.5⋅106を超えないことが保証されます。

出力は、
その外観のために、入力における各テストケースのための答えを印刷します。
除去されるべき位置のに必要な最小数、 -各回答の最初の行は、r(| |だ0≤r≤)|含有すべきだが| 指定された行の長さです。任意の順序で除去するための指標そのもの-各回答の2行目は、r異なる整数が含まれている必要があります。インデックスは1から文字列の長さに左から右に番号が付けられています。R = 0の場合は、2行目は省略することができる(または、空に印刷することができます)。いくつかの答えがある場合は、それらのいずれかを印刷します。


入力
4
onetwone
testme
oneoneone
twotwo

出力
2
6 3
0
3
4 1 7
2
1 4

入力
10
onetwonetwooneooonetwooo
2
1
twooooo
ttttwo
ttwwoo
ooone
onnne
oneeeee
oneeeeeeetwooooo

出力
6
18 11 12 1 6 21
1
1
1
3
1
2
1
6
0
1
4
0
1
1
2
1 11

タイトル効果:
文字列の削除部分を考えると(または削除することはできません)ので、ノー連続文字「1」または「2」という。
最近のフィールドDIV2のCF Cのタイトルは、戦略が、でもWA 3ラウンド、インスタント爆発ペナルティにつながる、最初にいくつかの疑問があります。戦略は、別個の「1」nを削除置く場合削除W別個「二」プットは、そのようなケースで同様の「oooneee」を作ることができれば、簡単である文字の複数のヘッドエンド。それは「twone」である場合と、O、削除置きます。最初のWAの決意は、ループポインタが「1」のループ後に削除O「twone」にジャンプしないためのn再度削除する、ために行われていません。ロゴアレイを添加した後、最終的にはカーソルに直接作られた蜂蜜waは、交流の治療の下でジャンプします。(Doがちょうど明確なタイトル.jpgのない脳をヒットしません)

コード
#include <ビット/ STDC ++ H> 
名前空間STDを使用して、
長い長いLLのtypedef。
int型T; 
文字列s; 
INT [100005]。
int型回、NUM; 
 
メイン(){int型
	CIN >> Tと、
	一方、(T - ){ 
		CIN >> S。
		時間= 0; NUM = 0; 
		以下のために(; I <s.size(); INT iが0 = I ++){ 
			IF(S [I] == 'O' && S [I + 1] == 'N' && S [iが+ 2] == 'E'){ 
				回++。
				A [NUM ++] = I + 2。
				私は、2 + =。
			}そうであれば(S [I] == 'T' && S [I + 1] == && 'W' S [I + 2] == 'O'){ 
				IF(S [I + 3] ==」 N」&& S [I + 4] == 'E'){ 
					回++。
					A [NUM ++] = I + 3。
					私は4 + =。
				}他{ 
					回++。
					A [NUM ++] = I + 2。
					私は、2 + =。
				}	
			}  
		}
		COUT <<回<< ENDL。
		以下のために(INT iが= 0; I <NUM; I ++){ 
			COUT << [I]。
			もし(I = NUM-1!){ 
				coutの<<」「; 
			} 
		} 
		COUT << ENDL。
	} 
	0を返します。
	
}

  


----------------

CSDNリンクします。https://blog.csdn.net/weixin_43880627/article/details/103621781

おすすめ

転載: www.cnblogs.com/jjmmboom/p/12075373.html