No.3234 Infinite Propagation
タグ : / 解いたユーザー数 81
作問者 : 👑

問題文
文字列 $s$ について $|s|$ を $s$ の長さ、 $s[i:j]$ を $s$ の $i$ 文字目から $j$ 文字目までの部分文字列と定義し、$i > j$ ならば $s[i: j]$ は空文字列とします。
a
, b
からなる文字列の組が $N$ 個与えられます。$i$ 番目の組は $(X_i, Y_i)$ です。
また、文字列 $S$ があり、はじめ $S$ は a
です。
これから以下のように定義される操作を考えます。 ここで、制約 $|X_i| < |Y_i|$ により、操作が有限回の繰り返しで終了することが保証されます。
操作:終了条件を満たすまで繰り返し行う。
- ある整数 $i$ であって $X_i$ が $S$ の部分文字列であるものが存在しない、または $|S| \ge 10^{100}$ であった場合、操作をただちに終了する。
- そうでないとき、$S[l:r]$ が $X_i$ と一致するような整数組 $(i, l, r)$ を $1$ つ選び、$S[l:r]$ を $Y_i$ に置き換える。
- より厳密には $S$ を、 $S[1:l-1], Y_i, S[r+1:|S|]$ をこの順に結合した文字列に置き換える。
操作が完了した後の $S$ の長さを $10^{100}$ 以上にできるか判定し、できるならば Yes
、そうでないならば No
と答えてください。
$T$ 個のテストケースが与えられるので、それぞれについて答えてください。
部分文字列とは
文字列 $s, t$ について $t$ が $s$ の部分文字列であるとは、$s$ のある連続した部分を取り出してできる文字列が $t$ と一致することを指します。
例えば、aaa
は baaab
の部分文字列ですが、bb
は baaab
の部分文字列ではありません。
制約
- $T$ は $1 \leq T \leq 10^4$ を満たす整数である
- $N$ は $1 \leq N \leq 10^5$ を満たす整数である
- $1$ つの入力ファイルにおける $N$ の総和は $10^5$ を超えない
- $X_i, Y_i$ は
a
,b
からなる文字列である - $1 \leq |X_i| \lt |Y_i| \leq 2 \times 10^5$
- $1$ つの入力ファイルにおける $\sum_{i = 1}^N |X_i|$ の総和は $2 \times 10^5$ を超えない
- $1$ つの入力ファイルにおける $\sum_{i = 1}^N |Y_i|$ の総和は $2 \times 10^5$ を超えない
入力
入力は以下の形式で標準入力から与えられます。ここで、$\mathrm{case}_k$ は $k$ 番目のテストケースを表します。
$T$ $\mathrm{case}_1$ $\mathrm{case}_2$ $\vdots$ $\mathrm{case}_T$
各テストケースは以下の形式で与えられます。
$N$ $X_1$ $Y_1$ $X_2$ $Y_2$ $\vdots$ $X_N$ $Y_N$
出力
$T$ 行出力し、$k$ 行目には $k$ 番目のテストケースについての答えを出力してください。
サンプル
サンプル1
入力
5 2 a ba ba bbba 2 a bb bbb aaaa 1 b aaabbb 3 a bb a ab a aa 5 a bbbb a bb ba bbbbb bbb aabb bbbbb aaabbb
出力
Yes No No Yes Yes
$1$ 番目のテストケースについて、例えば以下のように操作することができます。
- $i = 1$ を選ぶ。 $S$ の $1$ 文字目から $1$ 文字目までを抜き出した連続部分列
a
をba
に置き換える。 - $S$ は
a
からba
に更新される。 - $i = 2$ を選ぶ。 $S$ の $1$ 文字目から $2$ 文字目までを抜き出した連続部分列
ba
をbbba
に置き換える。 - $S$ は
ba
からbbba
に更新される。 - $i = 2$ を選ぶ。 $S$ の $3$ 文字目から $4$ 文字目までを抜き出した連続部分列
ba
をbbba
に置き換える。 - $S$ は
bbba
からbbbbba
に更新される。
このように操作することで、$S$ の長さは $6$ となります。実は、適切に操作を行うことで $S$ の長さを $10^{100}$ 以上にすることができます。
提出するには、Twitter 、GitHub、 Googleもしくは右上の雲マークをクリックしてアカウントを作成してください。