2021年11月9日火曜日

ACL Beginner Contest F - Heights and Pairs

hih_iが互いに異なる場合は(2N1)!!=(2N)!/2NN!(2N-1)!! = (2N)! / 2^N N!通りという有名事実がある(後述)。以下、pi=(2i1)!!p_i = (2i-1)!!とする。

身長hhの人がaha_h人いるとする。ii人の同じ身長を持つ人からjjペアを作る場合の数は(i2j)pj\binom{i}{2j}p_jである。F(x)=hj(ah2j)pjxjF(x) = \prod_h \sum_j \binom{a_h}{2j}p_j x^{j}とすると、F(x)F(x)xkx^kの係数[xk]F(x)[x^k]F(x)2N2N人から身長が同じであるようなkkペアを作る場合の数に等しい。このとき、残った人、つまり2(Nk)2(N-k)人でペアを作る場合の数はpNkp_{N-k}通りであり、あとは包除でk(1)kpNk([xk]F(x))\sum_k(-1)^kp_{N-k}([x^k]F(x))通りと求まる。

(2N1)!!(2N-1)!!について

2N2N人に1,2,...,2N1, 2, ..., 2Nという番号を振ってこの順に並べ、二人ずつ取り除いていくとする。この際、ペアのうちの一人目は必ずその時点で番号が最小の人を選ぶ、としておくと完全な数え上げができる。一人目には2N12N-1通りの人がマッチできて、二人目には2N32N-3通りの人がマッチできて、……となるので二重階乗の記号を使うと(2N1)!!(2N-1)!!と表せる。

別の考え方もできる。2N2N人を自由な順番で一列に並べて、隣り合う二人をくっつけてNNペアを作ることにする。並べ方は(2N)!(2N)!通りあるが、二人組の内の順番は考慮しないので2N2^Nで割る必要がある。さらに、NNペアの順番も考慮しないのでN!N!で割って(2N)!/(2NN!)(2N)!/(2^N N!)と求まる。これらは二重階乗の公式も与えている:

(2N1)!!=(2N)!2NN! (2N-1)!! = \frac{(2N)!}{2^N N!}