A - XXYYX Editorial 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
の必要十分条件となります.
posted:
last update: