C - Divide into 4 Teams Editorial by Tamiji

多項式

\(A,B,C,D\) が空でもよいとします.また, \(S=\sum P\) とします.

まず多項式 \(f(x,y)\) を以下のように定めます.

\[f(x,y)=\prod_{p\in P}(x^p+x^{-p}+y^p+y^{-p})=\left(\prod_{p\in P}(x^p+y^p)\right)\left(\prod_{p\in P}(1+(xy)^{-p})\right)\]

このとき答は \(f(x,y)[x^0y^0]\) に等しいです.右辺の括弧内の積をそれぞれ \(g(x,y),h(x,y)\) とします.

\(f(x,y)\) の各項について考えます. \(p\) であって, \(g(x,y)\)\(x^p\) を選んだものの総和を \(a\)\(h(x,y)\)\((xy)^{-p}\) を選んだものの総和を \(b\) とすると,最終的に \(x^{a-b}y^{S-a-b}\) の項となります.これが定数項になるには, \(a=b=S/2\) が必要十分です.

これは, \(P\) からいくつかの要素を選び総和を \(S/2\) にする方法の数を求め,それを \(2\) 乗すればよいです.部分和問題の要領で \(O(NS)\) で解くことができます.

\(A,B,C,D\) のいずれかが空の場合を考えます. \(A\) が空の場合,制約より \(B\) も空なので, \(C\) の総和を \(S/2\) にすればよく,これも部分和問題です. \(C,D\) が空の場合も同様です.

posted:
last update: