2020年1月11日土曜日

第6回 ドワンゴからの挑戦状 予選 B - Fusing Slimes

求めるのは$(N-1)!$通りの移動に関する距離の総和である。

$f(p, q) := x_p$から$x_q$への移動による距離の総和、とする。この移動が起こるのは、スライム${p+1}, ..., {q-1}$が自由な順番で選ばれ、そのあとで$p$が選ばれ、さらにそのあとで$q$が選ばれるケースである。この選び方を数えると、$N-1$箇所の中から$q-p+1$箇所を選び、その中の始めの$q-p-1$箇所にスライム$p+1, ..., q-1$を自由な順番で配置し、末尾の2箇所にスライム$p, q$を配置し、残った$N-1-(q-p+1)$箇所に残りのスライムを自由に並べればよい。つまり、

$$ \begin{aligned} f(p, q) & = \binom{N-1}{q-p+1}(q-p-1)!(N-1-(q-p+1))! \times (x_q-x_p)\\ & = \frac{(N-1)!}{(q-p+1)(q-p)}(x_q-x_p) \end{aligned} $$

ただし、$q = N$の場合はスライム$q$が選ばれないので

$$ \begin{aligned} f(p, q) & = \binom{N-1}{N-p}(N-p-1)!(N-1-(N-p))! \times (x_N - x_p) \\ & =\frac{(N-1)!}{(q-p)}(x_N - x_p) \end{aligned} $$

となる。$f$の総和を単純に計算すれば部分点が取れる。

上の式で$x_q-x_p$に掛かる係数は幅$q-p$のみによって決まっているので、同じ幅について($q \neq N$の場合に関して)整理してみる:

$$ \begin{aligned} & \sum_{p=1}^{N-1}\sum_{q=p}^{N-1}f(p, q)/(N-1)! \\ = &\frac{1}{2\cdot 1}(x_2-x_1) + ... + \frac{1}{2\cdot 1}(x_{N-1}- x_{N-2})\\ & + \frac{1}{3\cdot 2}(x_3-x_1) + ... + \frac{1}{3\cdot 2}(x_{N-1}- x_{N-3}) \\ & + .. \\ & + \frac{1}{(N-1)\cdot (N-2)}(x_{N-1}-x_1) \\ = &\frac{1}{2\cdot 1} \bigl( (x_2+x_3 + ... + x_{N-1}) - (x_{1}+x_2 + ... +x_{N-2}) \bigr )\\ & + \frac{1}{3\cdot 2} \bigl( (x_3+x_4 + ... + x_{N-1}) - (x_1 + x_2 + ... + x_{N-3}) \bigr) \\ & + ... \\ & + \frac{1}{(N-1) \cdot (N-2)}(x_{N-1} - x_1) \\ \end{aligned} $$

($(N-1)$!は共通なので除いて整理した。) これは累積和で処理できる形になっている。


満点に達するのに3時間かかった。解説の方針のほうが確かにずっと明快だけれど、上の整理くらいはさっさとできるようになりたい。