No.3587 Too Good to Swap
タグ : / 解いたユーザー数 16
作問者 :
siganai
問題文
文字列 $X$ が good を連続部分文字列として含むとき、
$X$ を「良い文字列」と呼びます。
d, o, g の $3$ 種類の文字のみからなる
同じ長さの文字列 $S$, $T$ が与えられます。
$S$, $T$ は、いずれも良い文字列ではありません。
あなたは文字列 $S$ に対して、以下の操作†を $0$ 回以上の好きな回数行うことができます。
- 現在の文字列において、隣り合う $2$ つの文字を選び、それらを入れ替える。
- ただし、入れ替えた後の文字列が良い文字列となる場合、この入れ替え操作は行えない。
$Q$ 個のテストケースが与えられます。各テストケースについて、 この操作のみを用いて、$S$ を $T$ に一致させることができるか判定してください。
† この操作は、より形式的には以下のように表せます:
- 現在の文字列を $X=x_1x_2\cdots x_{|X|}$ として、 $1 \leq i < |X|$ を満たす整数 $i$ を選び、 $X'=x_1x_2\cdots x_{i-1}x_{i+1}x_ix_{i+2}\cdots x_{|X|}$ とします。
-
このとき、$X'$ が
goodを連続部分文字列として含まない場合に限り、$X$ を $X'$ に更新します。
制約
- $1 \leq Q \leq 10^5$
- $1 \leq |S| = |T|$
- すべてのテストケースにおける $|S|$ の総和は $2 \times 10^5$ 以下
- $S$, $T$ は
d,o,gのみからなる文字列 - $S$, $T$ は、いずれも良い文字列ではない
- $Q$ は整数
入力
入力は以下の形式で標準入力から与えられます。ここで、 $q\ (1 \leq q \leq Q)$ 番目のテストケースを $\mathrm{case}_q$ と表します。
$Q$
$\mathrm{case}_1$
$\mathrm{case}_2$
$\vdots$
$\mathrm{case}_Q$
各テストケースは以下の形式で与えられます。
$S$ $T$
ここで、 $S$, $T$ はそのテストケースにおける文字列を表します。
出力
$Q$ 行出力してください。
$i$ 行目には、$i$ 番目のテストケースについて、$S$ を $T$ に一致させることができるなら Yes を、そうでないなら No を出力してください。
サンプル
サンプル1
入力
3 dog god gooodd gdoood doggod odddog
出力
Yes No No
$1$ 番目のテストケースでは、例えば dog $\to$ odg $\to$ ogd $\to$ god と操作できます。
$2$ 番目のテストケースでは、どのように操作しても、良い文字列を経由せずに $S$ を $T$ に一致させることはできません。
提出するには、Twitter 、GitHub、 Googleもしくは右上の雲マークをクリックしてアカウントを作成してください。