問題一覧 > 通常問題

No.3234 Infinite Propagation

レベル : / 実行時間制限 : 1ケース 2.000秒 / メモリ制限 : 512 MB / 標準ジャッジ問題
タグ : / 解いたユーザー数 81
作問者 : 👑 loop0919 / テスター : Iroha_3856
ProblemId : 12590 / 出題時の順位表 / 自分の提出
問題文最終更新日: 2025-08-14 21:55:29

問題文

文字列 $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$ と一致することを指します。
例えば、aaabaaab の部分文字列ですが、bbbaaab の部分文字列ではありません。

制約

  • $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$ 文字目までを抜き出した連続部分列 aba に置き換える。
    • $S$ は a から ba に更新される。
  • $i = 2$ を選ぶ。 $S$ の $1$ 文字目から $2$ 文字目までを抜き出した連続部分列 babbba に置き換える。
    • $S$ は ba から bbba に更新される。
  • $i = 2$ を選ぶ。 $S$ の $3$ 文字目から $4$ 文字目までを抜き出した連続部分列 babbba に置き換える。
    • $S$ は bbba から bbbbba に更新される。

このように操作することで、$S$ の長さは $6$ となります。実は、適切に操作を行うことで $S$ の長さを $10^{100}$ 以上にすることができます。

提出するには、Twitter 、GitHub、 Googleもしくは右上の雲マークをクリックしてアカウントを作成してください。