Official

A - XXYYX Editorial by ygussany


\(S\) の最初の文字と最後の文字を固定すると,XYYX の個数の差は間をどう埋めるかに依らず一意に決まります. たとえば X で始まり Y で終わるのであれば,途中で XYYX よりちょうど \(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: