はじめに
皆さんこんにちは!今回は主客転倒というテクニックについて解説していきます。数学オリンピックや競技プログラミングなどに幅広く使えるテクニックですのでぜひ見ていってください。
注意の見出し
本記事に修正、加筆を加えた
最新版
もぜひご覧ください。
主客転倒とは?
突然ですが皆さんは下記の表の総和を数える時,列ごとに数えますか?それとも行ごとに数えますか?
列 \ 行 | 1 | 2 | 3 | 4 | 5 |
1 | 1 | 0 | 0 | 4 | 5 |
2 | 1 | 2 | 0 | 4 | 0 |
3 | 0 | 2 | 3 | 4 | 5 |
4 | 1 | 0 | 0 | 4 | 0 |
5 | 0 | 2 | 3 | 0 | 5 |
6 | 1 | 2 | 0 | 0 | 5 |
7 | 0 | 0 | 3 | 0 | 0 |
おそらく各行を足してからそれらの合計を出すよりも,各列を足してからそれらの合計を出す方がわかりやすいですよね.今回の表は行ごとに見るとなんの法則性もありませんが,列ごとに見ると「同じ数字が出てくる」という法則性があると言うところにあります.実は,今回扱う主客転倒も自分が数えやすように工夫しようと言う考え方なのです.
主客転倒を一言で言うと,「視点を変えて楽に数え上げをしよう」ということです.もう少し具体的に言うと、「各事象がどれだけ合計に寄与、貢献しているかを考える」と言うことです.とは言ってもイメージが湧かないと思うのでとりあえず以下の例を見ていきましょう.
の並べ替えに対して"スコア"を「なるの個数()」で定める.この時,として有り得るもの全てについてそのスコアの総和を求めよ.
まずは具体例で実験です.
①の場合
の通りのスコアを計算することで、すなわちスコアの総和はであるとわかります.
①の場合
の通りのスコアを計算することで、すなわちスコアの総和はであるとわかります.
一般式を立てて計算!といきたいところですが,残念ながら各並べ替えのスコアを一般式で表すのは難しそうです.そこで少し視点を変えて見てみましょう.
まずは手始めに「となるケースが何通り存在するか?」を考えてみましょう.
となるケースを数えるには,単純にを固定して残りの並べ替えを考えれば良いですね.個の数字を並べ替える方法なので通り存在しますね.
例:の場合
を固定すると以下の通りが考えられる.
つまり,が貢献する回数はとなります.同様に他の文字についても考えると,となるわけです.
よって求めるスコアの総和はとなるわけです.
このように「貢献」を考えることを主客転倒と言います.とても便利な考え方ですね!次の例題にて,応用的な問題も見てみましょう.
例題
の並べ替えに対して"スコア"を「なるの個数()」で定める.この時,として有り得るもの全てについてそのスコアの二乗の総和を求めよ.
困りましたね,スコアの二乗の総和です.以下に例を載せておきます.
①の場合
の通りのスコアを計算することで、すなわちスコアの二乗の総和はであるとわかります.
このような場合は以下のように言葉で書き換えてみると良いでしょう.
(なるの個数)
=(なるの個数) (なるの個数)
=(なるの個数) (なるの個数)
この変形はとても当たり前のことですが,実はとってもありがたいのです.その理由は以下のように簡単に計算できることにあります.(二つのケースに場合分けして計算)
①AA型
「であるケース」について考えます.これは例1そのまんまですね.通りです.
②AB型
「かつでありなケース」について考えます.これはとの二つを固定して主客転倒をしてあげれば良いです.通りです.
よって,上記の二通りを足し合わせれば通りであるとわかります.
二乗を言葉に表現してあげることで,論理積へと分解することができました.とても有用なテクニックだと思います.それでは,基本的なことはわかったと思うので演習問題で慣れていきましょう!
演習問題
の並び替えに対して"スコア"をなる()の総和で定める.このとき,通り全ての並べ替えの"スコア"の総和を求めよ.
スコアの例
と言う並べ替えの場合"スコア"はとなります.
解答
解説冒頭の例1と同様に主客転倒して考えるとよりスコアの総和はとなります.
とする.の並び替えに対して"スコア"をなる()の個数で定める.(ただし,とみなす.)このとき,通り全ての並べ替えの"スコア"の総和を求めよ.
スコアの例
の並べ替えの場合"スコア"はです.
解説
を固定したとき,残りの並べ替え方は通りです.の選び方は通りであるから"スコア"の総和はとなります.
をの以上の約数の個数とする.このとき以下の値を計算せよ.
解答
以上の整数が何回寄与するかを考えれば良いですね.例えばはの計回数えられると言った具合です.
のマス目を白と黒の2色で塗り分ける.黒いマスと白いマスの両方に隣接している辺を"境界辺"と呼ぶ.このとき,通り全ての塗り分けについて"境界辺"の個数の総和を求めよ.
解答
"境界辺"に関する主客転倒で考えるとわかりやすいです."境界辺"になり得る辺の個数は.ある辺が"境界辺"となるような場合の数はなので,個となります.
OMC030-C
以下の順序付き正整数の組全てについて,の総和を計算したものをとおきます.このとき,の各桁の総和を求めてください.
解答
OMCのリンクに飛びます.
OMC095-E
項からなる数列の"スコア"を以下で定めます.
を並び替えてできる整数列は通り考えられますが,それらのスコアの平均値を求めてください.解答
OMCのリンクに飛びます.
OMC072-F
をで割った余りのうち最小のものをについて,以下の総和を求めてください.
解答
OMCのリンクに飛びます.
OMC120-D
の置換について,を満たす正整数の個数をとします.通りある全ての置換に対しての(相加)平均を求めてください.
解答
OMCのリンクに飛びます.
JMO2017-9
の並べ替えについて,となるの個数をとする.全ての並べ替えについてを足し合わせた値を求めよ.
解答
例2と同様に考えればAAAA,AAAB,AABB,AABC,ABCDのパターンの場合分けがあることがわかります.各パターンについて計算して足し合わせると通りとなります.
さらに追加で演習したい方に向けて僕が良問だなと感じた問題のリストを下に置いておきます。
・JJMO2018-7
・JMO2021-11
・JMO2017-6
・OMC136-F
※出典がない場合は基本的に自作問題です.
終わりに
今回は教科書のような構造で解説してみました.「冗長すぎる」や「わかりやすかった」などの感想があればぜひ教えてください.個人的に主客転倒はかなり感動させられた記憶があるのでこの感動をより多くの人に味わってもらいたいなと思いこの記事を作成しました.
また,今回の記事作成にあたっていくつかアドバイスをいただきました.協力してくださった方は本当にありがとうございます.