1. 程式人生 > 其它 >Solution -「LOCAL」菜

Solution -「LOCAL」菜

\(\mathscr{Description}\)

  Private link.

  給定 \(N,L,X,Y,K\),求選出 \(0\le a_1\le a_2\le\cdots a_{N-1}\le X<Y\le a_N\le L\),使得 \(\sum_{i=1}^{N-1}a_i>a_N\),且不存在某個 \(t\)\(a_{1..N}\) 中出現超過 \(K\) 次的方案數。答案對 \((10^9+7)\) 取模。

  \(N\le8\),其他 \(\le10^9\)

\(\mathscr{Solution}\)

  我走起來就是一個二元 GF:

\[\cdots=\prod_{i=0}^X\frac{1-y^{K+1}x^{i(K+1)}}{1-yx^i}. \]

止步於此,大腦空空。慘痛地,我們認識到,儘量不要為了在“描述”時偷懶,毫無顧忌地引入二元。

  先從 \(K\) 次入手,為方便描述集合劃分,欽定 \(a_{1..N}\) 亂序排列。那麼,設某個值出現了 \(t\) 次,就應當有描述其方案數貢獻的 EGF 中,\([z^t]G(t)=[t\le K]t!\cdot\frac{1}{t!}=[t\le K]\)。我們可以 \(\mathcal O(\operatorname{partition}(N))\) 枚舉出現次數集合,卻很難保證不同集合對應的值確實不同。為此,考慮一個被欽定大小為 \(t\) 的集合的容斥因子貢獻,設其 EGF 為 \(F(z)\),就有 \(G=\exp F\Rightarrow F=\ln G\)\([z^t]F(z)\)

就是該集合的容斥係數。

  接著描述選出前 \(N-1\) 個數的過程。列舉 \(n-1\) 的劃分 \(c_{1..m}\),有

\[M(z)=\prod_{i=1}^m \frac{1-z^{c_i(X+1)}}{1-z^{c_i}}. \]

對於 \(s=\sum_{i=1}^{N-1}\in (Y,L]\),其對應 \(a_N\) 的方案數為 \(s-Y\)。這一部分的和為

\[\sum_{s=Y+1}^L(i-Y)[z^i]M(z)=([z^L]-[z^{Y}])\left(\frac{z}{1-z}M'(z)-\frac{Y}{1-z}M(z)\right). \]

用 EI 求 \([z^n]P(z)/Q(z)\)

的科技(就是常係數齊次線性遞推那個)可以算出來。對於 \(s>L\),其貢獻為

\[([z^{\infty}]-[z^L])\frac{1}{1-z}M(z). \]

\(z\rightarrow 1\) 洛一洛就能算前一項,後一項和前面類似。複雜度大概是 \(\mathcal O(\operatorname{partition}(n)\operatorname{polylog}(n)\log L)\)

\(\mathscr{Code}\)

  嗚……不想寫。

  所以上面的式子可能都是錯的,誒嘿。(