2019年8月8日木曜日

ARC 067 E - Grouping

ARC 067 E - Grouping

xx人をAA人以上かつyy人以下からなるグループにわける場合の数をf(x,y)f(x, y)とすると、求める数はf(N,B)f(N, B)である。

漸化式を考える。yy人のグループを1つも作らない分け方はf(x,y1)f(x, y-1)に等しい。また、yy人のグループをちょうどkk個作る分け方は

f(xky,y1)(xy)(xyy)...(x(k1)yy)1k!=f(xky,y1)x!(xky)!(y!)k1k!f(x-ky, y-1)\binom{x}{y}\binom{x-y}{y}...\binom {x-(k-1)y}{y} \frac{1}{k!} = \\ f(x-ky, y-1)\frac{x!}{(x-ky)! (y!)^k} \frac{1}{k!}

である。(同人数のグループの区別はないので、kk個のグループを作ったあとk!k!で割っている。)したがって、漸化式は

f(x,y)=f(x,y1)+k{C,C+1,...,D}f(xky,y1)x!(xky)!(y!)k1k!f(x, y) = f(x, y-1) + \sum_{k \in \{C, C+1, ...,D\}}f(x-ky, y-1) \frac{x!}{(x-ky)! (y!)^k} \frac{1}{k!}

と書ける。ただしf(0,y)=1f(0, y) = 1であり、また、y<Ay < Aならf(x,y)=0f(x, y) = 0である。

計算量について。kyxNky \le x \le Nという条件により、与えられたy{1,2,...,B}y \in \{1, 2, ..., B\}に対して有効なkkは高々N/yN/y種類しかないから、遷移の総数はyN/y=O(NlogN)\sum_y N/y = {\mathcal O}(N \log N)。したがって、全体の計算量はO(N2logN){\mathcal O}(N^2 \log N)