| For All Solvers
OMC103 (for beginners)

OMC103(F)

ユーザー解説 by idtwstaos

 ここでは, 「ココア」を部分文字列として含まないものの個数を数えてみます.
 まず, 1212 文字が全て「コ」のときで 11 通りです.
 上のパターンを除けば, 少なくとも11 文字は「ア」が含まれるので, 以下はそのうち最も右にある「ア」が左から ii 文字目 (1i12)(1\leq{i}\leq12) にある場合について, 「ココア」を部分文字列として含まないものの個数を FiF_{i} としてそれぞれ数え上げをします.
 それが ii 文字目にあるとき, i+1i+1 文字目以降は「コ」しか書かれていません. それに加えて, 「ココア」を部分文字列として含まないための必要十分条件は以下の通りです.

  • 11 文字目から i1i-1 文字目までに「コ」が連続しない.

 このことに留意して, FiF_{i} を実際に求めてみましょう. F1=1,F2=2F_1=1, F_2=2 で, i3i\geq3 について,

  • i1i-1 文字目が「ア」であるとき, Fi1F_{i-1} 通り.
  • i1i-1 文字目が「コ」であるとき, i2i-2 文字目が「ア」となることから Fi2F_{i-2} 通り.

より Fi=Fi1+Fi2F_{i}=F_{i-1}+F_{i-2} が成り立ちます. これより F12=233F_{12}=233 まで順に求まり, F1+F2++F12=1+2++233=608F_1+F_2+…+F_{12}=1+2+…+233=608 通りとなります.
 以上より, 「ココア」を部分文字列として含むような場合の数は 212(1+608)=34872^{12}-(1+608)=\bf{3487} 通りです.

 補足として, フィボナッチ数列の和について. g1=g2=1,gn+2=gn+1+gn(n=1,2,)g_1=g_2=1, g_{n+2}=g_{n+1}+g_{n} (n=1,2,…) で定められるフィボナッチ数列 {gn}\{ g_{n} \} の第 nn 項までの和 SnS_{n} について, Sn=gn+21S_{n}=g_{n+2}-1 が成り立ちます. これは gi=gi+2gi+1g_{i}=g_{i+2}-g_{i+1} という式に i=1,2,,ni=1,2,…,n を代入して, それらを辺々順に足すことによって得られます. この式を利用すれば, 上の F1+F2++F12F_1+F_2+…+F_{12} は, F1+F2++F12=g2+g3++g13=g151g1=608F_1+F_2+…+F_{12}= g_2+g_3+…+g_{13}=g_{15}-1-g_1=608 とも求められます.