A - XXYYX 解説
by
ygussany
\(S\) の最初の文字と最後の文字を固定すると,XY と YX の個数の差は間をどう埋めるかに依らず一意に決まります.
たとえば X で始まり Y で終わるのであれば,途中で XY が YX よりちょうど \(1\) 回多く現れるはずであり,\(B - C = 1\) が成り立ちます.
他の場合も同様に考えると,\(|B - C| \le 1\) であることが Yes の必要条件となります.
\(|B - C| = 1\) の場合,常に所望の文字列 \(S\) が存在します. まず,\(A\) と \(D\) の条件を無視して,
- \(B - C = 1\) の場合は \(S' = {}\)
XYXY…XY( \(B\) 個のXYを連結), - \(B - C = -1\) の場合は \(S' = {}\)
YXYX…YX( \(C\) 個のYXを連結),
とします.
その後 \((A - 1)\) 個の X と \((D - 1)\) 個の Y をそれぞれ \(S'\) の先頭および末尾の同じ文字がある側に連結すれば,所望の文字列 \(S\) が得られます.
\(|B - C| = 0\) の場合も,\(B > 0\) であれば同様に Yes です.
たとえば \(S' = {}\)XYXY…XYX( \(B\) 個の XY を連結した後に \(1\) 個の X を連結)として,\((A - 1)\) 個の X と \((D - 1)\) 個の Y をそれぞれ同じ文字に隣接するように \(S'\) に挿入すれば,所望の文字列 \(S\) が得られます.
最後に,\(B = C = 0\) の場合は,XXX…X または YYY…Y のいずれかの形の文字列しかあり得ないため,\(A\) と \(D\) の少なくとも一方が \(0\) であることが Yes の必要十分条件となります.
投稿日時:
最終更新:
