F - Loud Cicada Editorial
by
Rssll_Krkgrd
\(S\subset\{1,\ldots,N\}\)について、\(C(S)\)を「一致条件\(S\)を満たす\(1\)以上\(Y\)以下の整数の個数」、\(D(S)\)を「部分条件\(S\)を満たす\(1\)以上\(Y\)以下の整数の個数」と定義します(一致条件、部分条件については公式解説を参照してください)。
すると、包除原理より、 \( C(S)= \sum_{S\subset T\subset\{1,\ldots,N\}} (-1)^{|T\setminus S|}\times D(T) \) が成り立つので、
\( \begin{aligned} (ちょうどM種類のセミが大量発生する年の回数)&=\sum_{S\subset\{1,\ldots,N\},|S|=M}C(S)\\&=\sum_{S\subset\{1,\ldots,N\},|S|=M}\left(\sum_{S\subset T\subset\{1,\ldots,N\}} (-1)^{|T\setminus S|}\times D(T) \right)\\&=\sum_{T\subset\{1,\ldots,N\}}\left(\sum_{S\subset T,|S|=M}(-1)^{|T\setminus S|}\times D(T)\right)\\&=\sum_{T\subset\{1,\ldots,N\}}(-1)^{|T|-M}\times D(T)\times\left(\sum_{S\subset T,|S|=M}1\right)\\&=\sum_{T\subset\{1,\ldots,N\}}(-1)^{|T|-M}\times D(T)\times\binom{|T|}{M} \end{aligned} \)
が成り立ちます。
したがって、\(D(T)\)の計算がボトルネックとなり、時間計算量\(\Omicron(2^N\log Y)\)でこの問題を解くことができます。
ちなみに、上記の式変形をせずに\(\sum_{S\subset\{1,\ldots,N\},|S|=M}\left(\sum_{S\subset T\subset\{1,\ldots,N\}} (-1)^{|T\setminus S|}\times D(T) \right)\)を直接計算する方針だと\(\binom{N}{M}\times2^{N-M}\)回の加算が必要になりますが、これは制約上最大でも\(635043840\)回なので、高速な言語ならこちらの方針でも実行時間制限に間に合うと思われます。
posted:
last update: