| For All Solvers
OMC230

OMC230(F) - 文字の巡回に注目する

ユーザー解説 by Shota_1110

 33 種類の文字に対する 22 通りの巡回(ABCABCA...ABCABCA ...ACBACBA...ACBACBA ...)に注目し,操作を繰り返した後の文字列がどのような形になるのかを調べる解法です.


 A,B,CA, B, C からなり,なおかつ同じ文字が隣接しないような文字列のことをここでは良い文字列と呼ぶことにする.長さ LL の良い文字列 SS に対し,次のルールにしたがって作られる長さ L1L - 1X,YX, Y からなる文字列を f(S)f(S) と表そう.

  • k=1,...,L1k = 1, ..., L - 1 に対し,k,k+1k, k + 1 文字目の連続 22 文字が AB,BC,CAAB, BC, CA のいずれかであれば kk 文字目を XX とし,AC,CB,BAAC, CB, BA のいずれかであれば kk 文字目を YY とする.

つまり ABCABCA...ABCABCA ... という巡回が起きるときに XXACBACBA...ACBACBA ... という巡回が起きるときに YY が設定されるようなイメージである.たとえば, f(ABACA)=XYYXf(ABCACAB)=XXXYXXf(ABACA) = XYYX,f(ABCACAB) = XXXYXX などが成り立つ.ここで次の事実を得る.

  • 事実 1. SS を良い文字列とし,SS に対し問題の操作を 11 回施して得られる良い文字列を SS^{\prime} とする.このとき f(S)f(S) に対し XYYYXXX \rightarrow YY,Y \rightarrow XX の置き換えをすべて同時に施すと,f(S)f(S^{\prime}) が得られる(それぞれの巡回が逆向きとなり倍増するイメージ).

 それでは長さ 20232023 の良い文字列 S0S_0 に対し,操作を 20232023 回繰り返して得られる文字列を S1S_1 としよう.また,g(k)=22023(k1)+1g(k) = 2^{2023} (k - 1) + 1 とする.このとき S0S_0 の選び方によらず以下 22 つが成り立つ(事実 3. は事実 1. からしたがう).

  • 事実 2. 各 k=1,...,2023k = 1, ..., 2023 に対し,S0S_0kk 文字目と S1S_1g(k)g(k) 文字目は等しい.
  • 事実 3. 任意の k=1,...,2022k = 1, ..., 2022 について,f(S1)f(S_1)g(k)g(k) 文字目から g(k+1)1g(k + 1) - 1 文字目までの 220232^{2023} 文字は,すべて XX であるか,すべて YY である.

ここで 220232(mod3)2^{2023} \equiv 2 \pmod{3} に注意し,α=22023+13\alpha = \dfrac{2^{2023} + 1}{3} とおこう.各 k=1,...,2022k = 1, ..., 2022 に対し,S1S_1g(k)g(k) 文字目から g(k+1)g(k + 1) 文字目までの 22023+1 (=3α)2^{2023} + 1\ (= 3 \alpha) 文字は,ABCABC...ABCABCABC ... ABC などのように同じ 33 文字を α\alpha 回繰り返していることが事実 3. からわかり,特に CC はこの範囲にちょうど α\alpha 個含まれる.このことをすべての kk について適用しよう.すると,S1S_1g(2),g(3),...,g(2022)g(2), g(3), ..., g(2022) 文字目の中に含まれる CC の個数を xxS1S_1 全体に含まれる CC の個数を yy と表したとき, x+y=2022αx + y = 2022 \alpha が成り立つ.また,事実 2. より xxS0S_0 における 22 文字目から 20222022 文字目までに含まれる CC の個数に等しい.S0S_0 が良い文字列であることから xx のとり得る範囲は 0x10110 \leq x \leq 1011 なので,結局 yy の最大値 MM と最小値 NN はそれぞれ以下のように表せる. M=2022αN=2022α1011M = 2022 \alpha,N = 2022 \alpha - 1011 x=0x = 0 なる S0S_022 文字目から 20222022 文字目までが ABABA...ABAABABA ... ABABABAB...BABBABAB ... BAB のどちらかであり,それぞれに対し 11 文字目と 20232023 文字目を決める方法は 22 通りずつある.よって,m=23=8m = 2^3 = 8 を得る.x=1011x = 1011 なる S0S_0 の場合は偶数文字目をすべて CC にする他なく,残りの 10121012 個の文字をそれぞれ独立に A,BA, B のどちらかに定めればよい.よって,n=21012n = 2^{1012} を得る.あとは公式解説同様 M+m+N+nM + m + N + n503503 で割った余りを求めればよい.