2021年11月7日日曜日

エイシング プログラミングコンテスト 2020 F - Two Snuke

2(s1+n1+u1+k1+e1)+Δs+Δn+Δu+Δk+ΔeN2(s_1+n_1+u_1+k_1+e_1)+\Delta s + \Delta n + \Delta u + \Delta k + \Delta e \le Nで各変数は非負という条件下でΔsΔnΔuΔkΔe\Delta s\Delta n\Delta u\Delta k\Delta eの総和を取る問題。

d=N(Δs+Δn+Δu+Δk+Δe)d = N - (\Delta s + \Delta n + \Delta u + \Delta k + \Delta e )とするとき、ΔsΔnΔuΔkΔe\Delta s\Delta n\Delta u\Delta k\Delta es1+n1+u1+k1+e1d/2s_1+n_1+u_1+k_1+e_1 \le d/2の非負整数解の数だけ足される。これは(d/2)+55)\binom{\lfloor d/2 \rfloor)+5}{5}通りだから、求める数は

d1+d2+d3+d4+d5+d=N(d/2+55)d1d2d3d4d5 \sum_{d_1+d_2+d_3+d_4+d_5 + d = N}\binom{\lfloor d/2 \rfloor+5}{5}d_1d_2d_3d_4d_5

に等しい。FPSで考えるなら、nnxn=x/(1x)2\sum_n nx^n = x/(1-x)^2を5乗してi(i/2+55)xi\sum_{i} \binom{\lfloor i/2 \rfloor +5}{5}x^{i}という謎の級数を掛けると、xNx^Nの係数が求める数である。後者にBerlekamp-Massey法を適用してみると21次の多項式を分母とする有理式が出てくるので、xNx^Nの係数はBostan-Mori法で求まる。


そもそも一般にi/2\lfloor i/2 \rfloorの多項式を係数にするFPSが有理べき級数になるのかどうかとか、基本的なことがよくわかっていなかった。

与えられたFPSf(x)f(x)の偶数項、奇数項がそれぞれ有理べき級数g(x),h(x)g(x), h(x)の偶数項、奇数項と一致しているなら、ggの(0-basedで)偶数項だけ抜き出したもの(g(x)+g(x))/2(g(x)+g(-x))/2hhの奇数項だけ抜き出したもの(h(x)h(x))/2(h(x)-h(-x))/2を足せばf(x)f(x)になるので、確かに有理べき級数になる。一般にi/k\lfloor i/k \rfloorの多項式を係数とするFPSについても、11kk乗根を考えれば同じことが言える。

一般化すると、次の性質を満たすf(x)=nanxnf(x) = \sum_n a_n x^nは有理べき級数と言える:

MM個の有理べき級数fk(x)=nbk,nxn (k=0,1,...,M1)f_k(x) = \sum_n b_{k, n}x^n \ (k=0, 1, ..., M-1)NNN \in \mathbb Nが存在して、nNn \ge Nならばan=bnmodM,na_n = b_{n \bmod M, n}