問題一覧 > 通常問題

No.3587 Too Good to Swap

レベル : / 実行時間制限 : 1ケース 2.000秒 / メモリ制限 : 1024 MB / 標準ジャッジ問題
タグ : / 解いたユーザー数 16
作問者 : marc2825 / テスター : siganai
ProblemId : 13434 / yukicoder contest 504 (順位表) / 自分の提出
問題文最終更新日: 2026-07-10 23:21:49
yukicoder contest 504の他の問題:

問題文

文字列 $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もしくは右上の雲マークをクリックしてアカウントを作成してください。