33
競技数学解説
文献あり

競技数学典型/主客転倒

5392
1

はじめに

皆さんこんにちは!今回は主客転倒というテクニックについて解説していきます。数学オリンピックや競技プログラミングなどに幅広く使えるテクニックですのでぜひ見ていってください。

注意の見出し

本記事に修正、加筆を加えた 最新版 もぜひご覧ください。

主客転倒とは?

突然ですが皆さんは下記の表の総和を数える時,列ごとに数えますか?それとも行ごとに数えますか?

列 \ 行12345
110045
212040
302345
410040
502305
612005
700300

おそらく各行を足してからそれらの合計を出すよりも,各列を足してからそれらの合計を出す方がわかりやすいですよね.今回の表は行ごとに見るとなんの法則性もありませんが,列ごとに見ると「同じ数字が出てくる」という法則性があると言うところにあります.実は,今回扱う主客転倒も自分が数えやすように工夫しようと言う考え方なのです.


主客転倒を一言で言うと,「視点を変えて楽に数え上げをしよう」ということです.もう少し具体的に言うと、「各事象がどれだけ合計に寄与、貢献しているかを考える」と言うことです.とは言ってもイメージが湧かないと思うのでとりあえず以下の例を見ていきましょう.

(1,2,,n)の並べ替え(a1,a2,,an)に対して"スコア"を「ai=iなるiの個数(1in)」で定める.この時,(a1,a2,,an)として有り得るもの全てについてそのスコアの総和を求めよ.

まずは具体例で実験です.

n=3の場合
(1,2,3),(1,3,2),(2,1,3),(2,3,1),(3,1,2),(3,2,1)
6通りのスコアを計算することで3+1+1+0+0+1=6、すなわちスコアの総和は6であるとわかります.
n=4の場合
(1,2,3,4),(1,2,4,3),(1,3,2,4),(1,3,4,2),(1,4,2,3),(1,4,3,2)
(2,1,3,4),(2,1,4,3),(2,3,1,4),(2,3,4,1),(2,4,1,3),(2,4,3,1)
(3,1,2,4),(3,1,4,2),(3,2,1,4),(3,2,4,1),(3,4,1,2),(3,4,2,1)
(4,1,2,3),(4,1,3,2),(4,2,1,3),(4,2,3,1),(4,3,1,2),(4,3,2,1)

24通りのスコアを計算することで4+2+2+1+1+2+2+0+1+0+0+1+1+0+2+1+0+0+0+1+1+2+0+0=24、すなわちスコアの総和は24であるとわかります.

一般式を立てて計算!といきたいところですが,残念ながら各並べ替えのスコアを一般式で表すのは難しそうです.そこで少し視点を変えて見てみましょう.

まずは手始めに「a1=1となるケースが何通り存在するか?」を考えてみましょう.

a1=1となるケースを数えるには,単純にa1=1を固定して残りの並べ替えを考えれば良いですね.n1個の数字を並べ替える方法なので(n1)!通り存在しますね.

例:n=4の場合
1を固定すると以下の6通りが考えられる.
(1,2,3,4),(1,2,4,3),(1,3,2,4),(1,3,4,2),(1,4,2,3),(1,4,3,2)

つまり,a1=1が貢献する回数は(n1)!となります.同様に他の文字についても考えると,(n1)!+(n1)!++(n1)!n=n!となるわけです.
よって求めるスコアの総和はn!となるわけです.

このように「貢献」を考えることを主客転倒と言います.とても便利な考え方ですね!次の例題にて,応用的な問題も見てみましょう.

例題

(1,2,,n)の並べ替え(a1,a2,,an)に対して"スコア"を「ai=iなるiの個数(1in)」で定める.この時,(a1,a2,,an)として有り得るもの全てについてそのスコアの二乗の総和を求めよ.

困りましたね,スコアの二乗の総和です.以下に例を載せておきます.


n=3の場合
(1,2,3),(1,3,2),(2,1,3),(2,3,1),(3,1,2),(3,2,1)
6通りのスコアを計算することで32+12+12+0+0+12=12、すなわちスコアの二乗の総和は12であるとわかります.

このような場合は以下のように言葉で書き換えてみると良いでしょう.

(ai=iなるiの個数)2
=(ai=iなるiの個数)× (ai=iなるiの個数)
=(ai=iなるiの個数)× (aj=jなるjの個数)

この変形はとても当たり前のことですが,実はとってもありがたいのです.その理由は以下のように簡単に計算できることにあります.(二つのケースに場合分けして計算)

①AA型

ai=aj=i=jであるケース」について考えます.これは例1そのまんまですね.n!通りです.

②AB型

ai=iかつaj=jでありijなケース」について考えます.これはaiajの二つを固定して主客転倒をしてあげれば良いです.nC22(n2)!=n!通りです.

よって,上記の二通りを足し合わせれば2n!通りであるとわかります.

二乗を言葉に表現してあげることで,論理積へと分解することができました.とても有用なテクニックだと思います.それでは,基本的なことはわかったと思うので演習問題で慣れていきましょう!

演習問題

(1,2,,n)の並び替え(a1,a2,,an)に対して"スコア"をai=iなるi(1in)の総和で定める.このとき,n!通り全ての並べ替えの"スコア"の総和を求めよ.

スコアの例
(1,2,5,3,4,6)と言う並べ替えの場合"スコア"は1+2+6=9となります.

解答
解説冒頭の例1と同様に主客転倒して考えると(n1)!(1+2+3++n)=(n+1)!2よりスコアの総和は(n+1)!2となります.

n2とする.(1,2,,n)の並び替え(a1,a2,,an)に対して"スコア"をai=i,ai+1=i+1なるi(1in)の個数で定める.(ただし,n+1=1とみなす.)このとき,n!通り全ての並べ替えの"スコア"の総和を求めよ.

スコアの例
(1,2,5,3,4,6)の並べ替えの場合"スコア"は2です.

解説
ak=k,ak+1=k+1を固定したとき,残りの並べ替え方は(n2)!通りです.kの選び方はn通りであるから"スコア"の総和はn(n2)!となります.

f(x)x200以上の約数の個数とする.このとき以下の値を計算せよ.

f(1)+f(2)++f(1000)
解答
200以上の整数が何回寄与するかを考えれば良いですね.例えば200f(200),f(400),,f(1000)の計5回数えられると言った具合です.
n=20010001000n=51+450+383+2167+1500=1228

n×nのマス目を白と黒の2色で塗り分ける.黒いマスと白いマスの両方に隣接している辺を"境界辺"と呼ぶ.このとき,2n2通り全ての塗り分けについて"境界辺"の個数の総和を求めよ.

解答
"境界辺"に関する主客転倒で考えるとわかりやすいです."境界辺"になり得る辺の個数は2n(n1).ある辺が"境界辺"となるような場合の数は22n22=2n21なので,2n2n(n1)個となります.
OMC030-C

N以下の順序付き正整数の組(a,b,c)全てについて,max(a,b,c)の総和を計算したものをf(N)とおきます.このとき,4f(102021)の各桁の総和を求めてください.

解答
OMCのリンクに飛びます.
OMC095-E

272項からなる数列{ai}i=1,2,,272の"スコア"を以下で定めます.

i=1256|aiai+16|

1,2,,272を並び替えてできる整数列は272!通り考えられますが,それらのスコアの平均値を求めてください.

解答
OMCのリンクに飛びます.
OMC072-F

N99,100,101で割った余りのうち最小のものをf(N)について,以下の総和を求めてください.

f(1)+f(2)++f(99×100×101)

解答
OMCのリンクに飛びます.
OMC120-D

1,2,,1000の置換a1,a2,,a1000について,ai<ai+1を満たす正整数iの個数をNとします.1000!通りある全ての置換に対してN2の(相加)平均Mを求めてください.

解答
OMCのリンクに飛びます.
JMO2017-9

1,2,,2017の並べ替えσ=(σ(1),σ(2),,σ(2017))について,σ(i)=iとなる1i2017の個数をF(σ)とする.全ての並べ替えσについてF(σ)4を足し合わせた値を求めよ.

解答
例2と同様に考えればAAAA,AAAB,AABB,AABC,ABCDの5パターンの場合分けがあることがわかります.各パターンについて計算して足し合わせると152017!通りとなります.

さらに追加で演習したい方に向けて僕が良問だなと感じた問題のリストを下に置いておきます。

・JJMO2018-7
・JMO2021-11
・JMO2017-6
・OMC136-F

※出典がない場合は基本的に自作問題です.

終わりに

今回は教科書のような構造で解説してみました.「冗長すぎる」や「わかりやすかった」などの感想があればぜひ教えてください.個人的に主客転倒はかなり感動させられた記憶があるのでこの感動をより多くの人に味わってもらいたいなと思いこの記事を作成しました.

また,今回の記事作成にあたっていくつかアドバイスをいただきました.協力してくださった方は本当にありがとうございます.

参考文献

投稿日:20221116
更新日:2024315
OptHub AI Competition

この記事を高評価した人

高評価したユーザはいません

この記事に送られたバッジ

バッジはありません。
バッチを贈って投稿者を応援しよう

バッチを贈ると投稿者に現金やAmazonのギフトカードが還元されます。

投稿者

自己満足

コメント

他の人のコメント

コメントはありません。
読み込み中...
読み込み中
  1. はじめに
  2. 主客転倒とは?
  3. まずは具体例で実験です.
  4. 例題
  5. 演習問題
  6. 終わりに
  7. 参考文献