はじめに
この記事は後編です。先に
前編
を読むことをオススメします。
対称性で消して周期を見つける
バイナリ列
バイナリ列()であって、総和がの倍数になるものはいくつ存在しますか?
元がつしかないのでグループ分けで解くのは難しそうです。別のアプローチをしてみましょう。
数列()であって、総和がの倍数になるものの総数を、総和がで割って余るものの総数を、余るものの総数をとします。試しに、の値を計算してみましょう。
の値はの値から求められます。
が同じ時のの差は未満になっていそうですね。この差を詳しく見てみたいですね。
ここで、前回の内容の確認も兼ねて、次の問題を考えてみましょう。
01バイナリ列(改)
数列(,)であって、総和がの倍数になるものはいくつ存在しますか?
これは前回もやりました。この問題の場合のそれぞれの総数を考えてみましょう。
一度になるとずっとになります。当たり前ですね。
ここで、元の問題について前回と同様に対称性を無理やり作り出す事を考えます。
の場合、となっていますが、これをとの二つに分けます。どうなるか実際に計算してみましょう。の計算と同じように前の値から計算していきます。
この時、線形性からになることが分かります。
は常に成り立つので、間の差を考えるには、だけ考えれば良いです。
ここで、の場合を見ると、となっていますが、これはさらにとの二つに分けられます。間の差を考えるには、だけ考えれば良いです。
まとめると、の値から途中で同じ値を引いてもの差には支障がないという事ですね。
これを踏まえて、を求めてみましょう。
の場合との場合で値が一致したので、この数列の周期はである事が分かりました。
よって、 の場合の差分はと分かります。ところで、バイナリ列全体の数を考えれば、と簡単に分かります。
あとは和差算のようなことをやれば、の値が分かります。
答えを求めることが出来ました!
ちなみに、差分計算について負の数を用いてこのような解釈もできます。
こう見ると、の時点で既に周期であることが見えますね!
実践しよう
前編では漸化式の遷移に対称性を見出すだけでしたが、今回からは漸化式の値にも対称性を見つけることが出来るようになりました。これで似たような設定の問題はほとんど倒すことが出来ます。
早速見てみましょう。
バイナリ列2(OMC048-C改題)
バイナリ列()であって、総和がの倍数になるものはいくつ存在しますか?
これも先ほどと同じように差分を計算して考えてみましょう。
の値との値を比べてみましょう。値がずれながら倍になっています。の場合も値がずれながら倍になっています。このことからの時の差分の値は、となります。
また、総和がであることから、答えの値はこのように求まります。
の部分集合であって要素の総和がの倍数であるものはいくつあるか。
3Blue1Brownの動画内では多項式が使われていますが、今回は使わずに解いていきます。
今回は毎回同じ遷移をしているわけではないことに注意してください。
周期がで倍になっているのがわかります。(ちなみにだけではなく一般の奇素数についていちいち遷移を考えなくても計算できるのですが、それはまた別の機会に)
の時は となり、その総和はなので答えの値はこのように求まります。
応用編
ここからはsimasima specialを応用して解けるOMCの問題を問紹介します。どちらも最も上のクラスのコンテストで出題された超難問です。
なお、改題によって期待値の線形性を用いる部分が省かれています。
OMC160-C(500点)(改題)
正二十面体の頂点のうち、一つをとする。点は最初にある。点が「辺で繋がった頂点つの中から等確率につを選び移動する」という移動を回行ったとき、点と点との距離の期待値を求めよ。(ここでは点と点との距離を、からまで辺に沿って辿るときに経由する辺の個数の最小値とする。一致する場合は)
回移動した後、距離がになる確率を、と置きます。
この時、求めるべき値はなので、高々回計算すれば求まるでしょう。しかし、これでは多くの時間がかかってしまい他の問題を解く時間が無くなってしまいます。試しにを計算してみましょう。
求めたいのは期待値です。ここで、正二十面体の上下の対称性を考えると、なら、その後もずっととなり、期待値はで不変になることが分かります。(下の図は例)
なので、とは打ち消して最後に考えることが出来ます。
の差分は次のようになります
周期でどんどん倍されていきます。簡単ですね。
の時の差分の値はになります。の場合期待値は、それ以外のの場合はなので、答えはになります。
とてもスマートに解くことが出来ました。
OMC112-F(700点)(改題)
からまでの整数の書かれたボールが個ずつ計個のボールが入った箱の中から同時にランダムにつのボールを取り出し、書かれている数の総和をで割った値をスコアとする。同じ数が書かれたボールも区別する時取り出し方は通りある。そのスコアの総和を求めよ。
今回のラスボスです。Difficulty(難易度)は赤と最大で、正解者は僅かに人という正真正銘の超難問です。公式の解説ではFPSを用いていますが、simasima specialを使っても倒せます。
まず、個のボールをという風につの集合に分けます。
それぞれの集合から選ばれるボールの個数をとします。を固定した時のスコアの総和を考えてみましょう。の時、集合からボールを選ぶ方法は通りありますが、ボールに書かれた数の総和をそれぞれについてまとめると次のようになります。
ここにsimasima specialを適用すると次のように綺麗になります。
| |
(差分) | |
(差分) | |
(差分) | |
(差分) | |
(差分) | |
(差分) | |
(差分) | |
(これは偶然では無く、任意の素数について成り立つ事が組合せ的な解釈に基づいて証明できますが、今回は愚直にやっても解けるので割愛します。)
であることから、なので、差分の値は条件を満たす全ての組についてになることが分かります。を満たすは通りあるので、全体について差分の値はになります。
個のボールからつ選ぶ方法は通りです。そのうち、通りではスコア、その他通りには、スコアが同じ数だけ含まれています。
よって答えは次のようになります。
おわり らない 次回予告
これでOMCにあるsimasima specialが使えそうな問題を全て倒せる、と言いたいところですが、1問だけ残っています。OMC024-Dです。この問題はまだ筆者がいい感じに倒せていません。正確に言うとOMC024-D自体は倒せているのですが、変数を増やすと使えないAd-hocなものになっているので微妙です。変数が増えた設定の問題が解け次第新たに記事を書こうと思います。また、simasima specialを一般化して行列の対角化に持って行く話もあるのですが、筆者自身の線形代数の習熟度が足りないので半年くらい寝かせようと思います。それではまた次回。