[TJOI2019]唱、跳、rap和篮球

题目

洛谷

题意

n n n个同学排队,有分别喜欢唱、跳、rap、篮球的(下文用 c 、 t 、 r 、 l c、t、r、l ctrl代替)。将他们排成一列,使没有连续 4 4 4个是 c t r l ctrl ctrl。求合法的排列数。

思路

首先,对于这一类求方案数,我们按照常规,将它反过来,求至少有一个 c t r l ctrl ctrl的方案数。

分解

鸡你太美

考虑将讨论鸡你太美的人提出来,计算讨论鸡你太美的人的方案数。
设讨论鸡你太美的有 m m m堆人,则不讨论鸡你太美的人有 n − 4 m n-4m n4m个。将这样的一堆看做一个点,显然,就将排列看成了 n − 3 m n-3m n3m个点。
接下来,要从这总共的 n − 3 m n-3m n3m个点中选出不讨论鸡你太美 n − 4 m n-4m n4m个人。易得,这样的选取数为
C n − 3 m n − 4 m = C n − 3 m m C_{n-3m}^{n-4m}=C_{n-3m}^{m} Cn3mn4m=Cn3mm

鸡你不美

接下来,计算不讨论鸡你太美(简称鸡你不美)的排列数。
这个时候,不能直接简单地进行组合。因为有可能两个鸡你不美的数列拼在一起,会产生鸡你太美,导致实际讨论鸡你太美的人大于 4 m 4m 4m
怎么解决这个问题呢?考虑进行容斥,枚举实际的讨论组数 m m m ~ n 4 \frac{n}{4} 4n
设题中 a 、 b 、 c 、 d a、b、c、d abcd中的最小值为 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=0p(1)i×Cn3ii×(n4i)
为什么呢?
因为枚举至少 i i i组的时候,会对至少 j j j组( j ≥ i ) j≥i) ji)的产生 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 ctrl分别有 a − m 、 b − m 、 c − m 、 d − m a-m、b-m、c-m、d-m ambmcmdm个,总排列数为 ( n − 4 m ) ! (n-4m)! (n4m)!

  • 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)!} (am)!(bm)!(cm)!(dm)!(n4m)!

  • 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=aam,bbm,ccm,ddm[a+b+c+d=n4m]a!b!c!d!(n4m)!
                         = ( 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'!}                         =(n4m)!aam,bbm,ccm,ddm[a+b+c+d=n4m]a!1b!1c!1d!1
很显然,是一个四元卷积,进行 N T T NTT NTT求值即可。

Code:

咕咕咕
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值