题目
题意
n n n个同学排队,有分别喜欢唱、跳、rap、篮球的(下文用 c 、 t 、 r 、 l c、t、r、l c、t、r、l代替)。将他们排成一列,使没有连续 4 4 4个是 c t r l ctrl ctrl。求合法的排列数。
思路
首先,对于这一类求方案数,我们按照常规,将它反过来,求至少有一个 c t r l ctrl ctrl的方案数。
分解
鸡你太美
考虑将讨论鸡你太美的人提出来,计算讨论鸡你太美的人的方案数。
设讨论鸡你太美的有
m
m
m堆人,则不讨论鸡你太美的人有
n
−
4
m
n-4m
n−4m个。将这样的一堆看做一个点,显然,就将排列看成了
n
−
3
m
n-3m
n−3m个点。
接下来,要从这总共的
n
−
3
m
n-3m
n−3m个点中选出不讨论鸡你太美
n
−
4
m
n-4m
n−4m个人。易得,这样的选取数为
C
n
−
3
m
n
−
4
m
=
C
n
−
3
m
m
C_{n-3m}^{n-4m}=C_{n-3m}^{m}
Cn−3mn−4m=Cn−3mm
鸡你不美
接下来,计算不讨论鸡你太美(简称鸡你不美)的排列数。
这个时候,不能直接简单地进行组合。因为有可能两个鸡你不美的数列拼在一起,会产生鸡你太美,导致实际讨论鸡你太美的人大于
4
m
4m
4m。
怎么解决这个问题呢?考虑进行容斥,枚举实际的讨论组数
m
m
m ~
n
4
\frac{n}{4}
4n。
设题中
a
、
b
、
c
、
d
a、b、c、d
a、b、c、d中的最小值为
p
p
p
发现
A
n
s
=
Ans=
Ans=
∑
i
=
0
p
(
−
1
)
i
×
C
n
−
3
i
i
×
(
剩
余
n
−
4
i
个
人
的
排
列
数
)
\sum_{i=0}^{p}(-1)^{i}\times C_{n-3i}^{i}\times (剩余n-4i个人的排列数)
i=0∑p(−1)i×Cn−3ii×(剩余n−4i个人的排列数)
为什么呢?
因为枚举至少
i
i
i组的时候,会对至少
j
j
j组(
j
≥
i
)
j≥i)
j≥i)的产生
C
j
i
C_{j}^{i}
Cji的贡献
例如:
当枚举至少
1
1
1组时,会对至少
2
2
2组的产生
C
2
1
=
2
C_{2}^{1}=2
C21=2的贡献,对至少
3
3
3组的产生
C
3
1
=
3
C_{3}^{1}=3
C31=3的贡献
当枚举至少
2
2
2组时,会对至少
3
3
3组的产生
C
3
2
=
3
C_{3}^{2}=3
C32=3的贡献,对至少
4
4
4组的产生
C
4
2
=
6
C_{4}^{2}=6
C42=6的贡献
那么,剩余人的排列数如何算呢?
其实很简单。
因为剩余
c
、
t
、
r
、
l
c、t、r、l
c、t、r、l分别有
a
−
m
、
b
−
m
、
c
−
m
、
d
−
m
a-m、b-m、c-m、d-m
a−m、b−m、c−m、d−m个,总排列数为
(
n
−
4
m
)
!
(n-4m)!
(n−4m)!
-
a + b + c + d = n a+b+c+d=n a+b+c+d=n,即一个人只喜欢一种,排列数就为
( n − 4 m ) ! ( a − m ) ! ( b − m ) ! ( c − m ) ! ( d − m ) ! \frac{(n-4m)!}{(a-m)!(b-m)!(c-m)!(d-m)!} (a−m)!(b−m)!(c−m)!(d−m)!(n−4m)! -
a + b + c + d > n a+b+c+d>n a+b+c+d>n,一个人可能喜欢多种,这个时候该怎么办呢?我们考虑在计算排列的同时进行枚举。得到式子:
P
a
i
=
∑
a
′
≤
a
−
m
,
b
′
≤
b
−
m
,
c
′
≤
c
−
m
,
d
′
≤
d
−
m
[
a
′
+
b
′
+
c
′
+
d
′
=
n
−
4
m
]
(
n
−
4
m
)
!
a
′
!
b
′
!
c
′
!
d
′
!
Pai=\sum_{a'≤a-m,b'≤b-m,c'≤c-m,d'≤d-m}[a'+b'+c'+d'=n-4m]\frac{(n-4m)!}{a'!b'!c'!d'!}
Pai=a′≤a−m,b′≤b−m,c′≤c−m,d′≤d−m∑[a′+b′+c′+d′=n−4m]a′!b′!c′!d′!(n−4m)!
=
(
n
−
4
m
)
!
∑
a
′
≤
a
−
m
,
b
′
≤
b
−
m
,
c
′
≤
c
−
m
,
d
′
≤
d
−
m
[
a
′
+
b
′
+
c
′
+
d
′
=
n
−
4
m
]
1
a
′
!
1
b
′
!
1
c
′
!
1
d
′
!
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ =(n-4m)!\sum_{a'≤a-m,b'≤b-m,c'≤c-m,d'≤d-m}[a'+b'+c'+d'=n-4m]\frac{1}{a'!}\frac{1}{b'!}\frac{1}{c'!}\frac{1}{d'!}
=(n−4m)!a′≤a−m,b′≤b−m,c′≤c−m,d′≤d−m∑[a′+b′+c′+d′=n−4m]a′!1b′!1c′!1d′!1
很显然,是一个四元卷积,进行
N
T
T
NTT
NTT求值即可。
Code:
咕咕咕