我当然知道 CSP-S 前沉迷数数是不对的,但是就是停不下来啊……
一道比较套路的容斥题。
首先显然有 K≤min(⌊NS⌋,M)。
令 k=min(⌊NS⌋,M)。
设 fi 表示至少 i 个颜色出现次数恰好为 S 的方案数。
则从 M 种颜色中选择 i 种颜色,再从 N 个位置中选择 iS 个位置,再考虑这 iS 个位置之间的颜色次序即多重集排列数,然后剩下 N−iS 个位置随便给一个这 m 个之外的颜色。
有 fi=(Mi)(NiS)(iS)!(S!)i(m−i)N−iS
再设 Fi 表示恰好有 i 个颜色出现次数恰好为 S 的方案数。
根据容斥原理易得 Fi=k∑j=i(−1)j−i(ji)Fj=k∑j=i(−1)j−ij!i!(j−i)!Fji!⋅Fi=k∑j=ij!⋅fj⋅(−1)j−i(j−i)!
看起来有点卷积的味道了,但是还不能直接做。
令 Ai=i!⋅fi,Bi=(−1)ii!。
又 k∑j=iAj⋅Bj−i=k−i∑j=0Ai+j⋅Bj。
注意到若令 A′i=Ak−i,则原式化为 k−i∑j=0A′k−i−j⋅Bj。
熟悉的卷积,NTT 之后求 xk−i 的系数即可。
答案即 k∑i=0Wi⋅Fi。
代码:
1 |
|