题意分析
要求\(k\)种颜色恰好出现\(S\)次
也就是出现\(S\)次的颜色恰好有\(k\)种
我们可以发现\(lim=max\{k\}=min(\frac{n}{s},{m})\)
我们可以容斥一下 就是
出现\(S\)次的颜色至少存在\(k\)种
那么
\[dp[k]=C_m^kC_{n}^{ks}(m-k)^{m-ks}\]
应该和好理解的
出现\(S\)次的颜色恰好\(k\)种就是
\[ans[k]=\sum_{j=k}^{lim}(-1)^{j-k}C_j^kdp[j]\]
\(j\)种颜色中\(k\)种被重复算了\(C_j^k\)次
那么我们拆开就是
\[ans[k]* k!=\sum_{j=k}^{lim}\frac{(-1)^{j-k}}{(j-k)!}dp[j]* j!\]
如何求\(\sum_{j=k}^{lim}\frac{(-1)^{j-k}}{(j-k)!}dp[j]* j!\)
我们考虑维护出
\[a[i]=dp[i]* i!\ \ \ \ \ \ b[i]=\frac{(-1)^{i}}{i!}\]
然后就是套路 翻转\(a\)序列
那么就是多项式乘法\(NTT\)了
那么对应就是\(lim-j+j-k=lim-k\)
所以我们再反转一下就可以了
然后累加就可以了
CODE:
#include #include #include #include #include #include #include #include #include
HEOI 2019 RP++