题意就不用讲了吧……
鸡你太美!!!
题意:
有 4 4 4 种喜好不同的人,分别最爱唱、跳、 r a p rap rap、篮球,他们个数分别为 A , B , C , D A,B,C,D A,B,C,D ,现从他们中挑选出 n n n 个人并进行排列,规定不能出现喜爱唱、跳、 rap、篮球的人在序列中依次出现,问合法方案数。
下文将喜爱唱、跳、 r a p rap rap、篮球的人依次出现的区间称为聚集区间,长度为 4 4 4。
思路(容斥原理 + 生成函数 + N T T \mathcal{NTT} NTT)
首先,我们可以发现如果顺着求方案数并不好求。秉持顺难逆易的原则,我们可以考虑容斥,令 f ( k ) f(k) f(k) 表示在长度为 n n n 的序列中出现了至少 k k k 个聚集区间的方案数,进而我们得出: A n s w e r = ∑ k ( − 1 ) k f ( k ) Answer=\displaystyle\sum_{k}(-1)^{k}f(k) Answer=k∑(−1)kf(k)。
接下来,我们的目标就是求出 f ( k ) f(k) f(k)。我们可以设这 k k k 个聚集区间的起始位置 i i i,并把 i , i + 1 , i + 2 , i + 3 i,i+1,i+2,i+3 i,i+1,i+2,i+3 缩为一个点,这样就一共剩下 n − 3 k n-3k n−3k 个点,接着,我们就可以从这 n − 3 k n-3k n−3k 个点中选取不在聚集区间内的点,这样的点一共有 n − 4 k n-4k n−4k 个,所以方案数为 ( n − 3 k n − 4 k ) = ( n − 3 k k ) \binom{n-3k}{n-4k}=\binom{n-3k}{k} (n−4kn−3k)=(kn−3k)。
我们设 S ( a , b , c , d , n ) S(a,b,c,d,n) S(a,b,c,d,n) 表示 4 4 4 种人的数量分别有 a , b , c , d a,b,c,d a,