[TJOI2019]唱、跳、rap和篮球
题目
洛谷
题意
nnn个同学排队,有分别喜欢唱、跳、rap、篮球的(下文用c、t、r、lc、t、r、lc、t、r、l代替)。将他们排成一列,使没有连续444个是ctrlctrlctrl。求合法的排列数。
思路
首先,对于这一类求方案数,我们按照常规,将它反过来,求至少有一个ctrlctrlctrl的方案数。
分解
鸡你太美
考虑将讨论鸡你太美的人提出来,计算讨论鸡你太美的人的方案数。
设讨论鸡你太美的有mmm堆人,则不讨论鸡你太美的人有n−4mn-4mn−4m个。将这样的一堆看做一个点,显然,就将排列看成了n−3mn-3mn−3m个点。
接下来,要从这总共的n−3mn-3mn−3m个点中选出不讨论鸡你太美n−4mn-4mn−4m个人。易得,这样的选取数为
Cn−3mn−4m=Cn−3mmC_{n-3m}^{n-4m}=C_{n-3m}^{m}Cn−3mn−4m=Cn−3mm
鸡你不美
接下来,计算不讨论鸡你太美(简称鸡你不美)的排列数。
这个时候,不能直接简单地进行组合。因为有可能两个鸡你不美的数列拼在一起,会产生鸡你太美,导致实际讨论鸡你太美的人大于4m4m4m。
怎么解决这个问题呢?考虑进行容斥,枚举实际的讨论组数mmm ~ n4\frac{n}{4}4n。
设题中a、b、c、da、b、c、da、b、c、d中的最小值为ppp
发现Ans=Ans=Ans=
∑i=0p(−1)i×Cn−3ii×(剩余n−4i个人的排列数)\sum_{i=0}^{p}(-1)^{i}\times C_{n-3i}^{i}\times (剩余n-4i个人的排列数)i=0∑p(−1)i×Cn−3ii×(剩余n−4i个人的排列数)
为什么呢?
因为枚举至少iii组的时候,会对至少jjj组(j≥i)j≥i)j≥i)的产生CjiC_{j}^{i}Cji的贡献
例如:
当枚举至少111组时,会对至少222组的产生C21=2C_{2}^{1}=2C21=2的贡献,对至少333组的产生C31=3C_{3}^{1}=3C31=3的贡献
当枚举至少222组时,会对至少333组的产生C32=3C_{3}^{2}=3C32=3的贡献,对至少444组的产生C42=6C_{4}^{2}=6C42=6的贡献
那么,剩余人的排列数如何算呢?
其实很简单。
因为剩余c、t、r、lc、t、r、lc、t、r、l分别有a−m、b−m、c−m、d−ma-m、b-m、c-m、d-ma−m、b−m、c−m、d−m个,总排列数为(n−4m)!(n-4m)!(n−4m)!
a+b+c+d=na+b+c+d=na+b+c+d=n,即一个人只喜欢一种,排列数就为
(n−4m)!(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>na+b+c+d>na+b+c+d>n,一个人可能喜欢多种,这个时候该怎么办呢?我们考虑在计算排列的同时进行枚举。得到式子:
Pai=∑a′≤a−m,b′≤b−m,c′≤c−m,d′≤d−m[a′+b′+c′+d′=n−4m](n−4m)!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−4m)!∑a′≤a−m,b′≤b−m,c′≤c−m,d′≤d−m[a′+b′+c′+d′=n−4m]1a′!1b′!1c′!1d′!\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ =(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
很显然,是一个四元卷积,进行NTTNTTNTT求值即可。
Code:
咕咕咕
[TJOI2019]唱、跳、rap和篮球相关推荐
- 一个摄像头就能让虚拟人唱跳rap,抖音即可玩
允中 发自 凹非寺 量子位 | 公众号 QbitAI 全身动作捕捉,现在无需昂贵的动捕设备,只要一个摄像头就能轻松实现. 并且就在抖音上,人人都能上手体验. 上面这段虚拟数字形象跳舞的视频采用了抖音直 ...
- 3D模型学会了「唱、跳、Rap、篮球」,程序员们全沉迷「鸡你太美」
继 B 站之后,GitHub 网友也开始沉迷「鸡你太美」,让 3D 姿态也学会了「唱.跳.Rap.篮球」,而且动作准确度和连贯性似乎一点也不输练习时长两年半的练习生. 看了这段 demo 之后,网友戏 ...
- 我写小程序像菜虚鲲——1、唱,跳,rap,篮球
引言 大家好,我是练习时长两年半的个人练习生菜虚鲲,我喜欢唱,跳,rap,篮球,Music! 为了避免律师含,就不po鲲鲲的原图咯~ 在小作坊待久了,都忘记自己的本职工作当初进来是一枚Android开 ...
- [TJOI2019]唱、跳、rap和篮球(指数型生成函数+NTT+卷积)
文章目录 题目 题解 code1(NTT) code2(EGF+卷积) 题目 大中锋的学院要组织学生参观博物馆,要求学生们在博物馆中排成一队进行参观.他的同学可以分为四类:一部分最喜欢唱.一部分最喜欢 ...
- 练习时长两年半,二本学历,没背景,会唱跳篮球,美团四面成功拿下offer
个人背景 又逢"金九银十",年轻的毕业生们满怀希望与忐忑,去寻找.竞争一个工作机会.已经在职的开发同学,也想通过社会招聘或者内推的时机争取到更好的待遇.更大的平台. 然而,面试人群 ...
- 长相酷似小强的小米「铁蛋」机器狗,售价 9999 元,打滚唱跳会空翻
整理 | 禾木木 出品 | AI科技大本营(ID:rgznai100) 8月10日晚,雷军年度演讲及小米秋季发布会在线上召开,此次发布会足足讲了三个小时,不仅介绍了小米的目前市场状况,还分享了新品以及 ...
- Vue第一部分(2): 数据的渲染
插值表达式 数据绑定最常见的形式就是使用 {{值}} (双大括号)的文本插值: <div id="app"><h1>{{msg}}</h1>&l ...
- Python多线程(自学必备 超详细)
多线程技术 多任务 1.1 多任务的概念 多任务:在同一时间内执行多个任务[可以把每个任务理解为生活当中的每个活] 1.2 现实生活中的多任务 操作系统可以同时运行多个任务.比如,你一边打游戏,一边和 ...
- 带你从Vue入门到进阶
系统学习前端Vue框架,笔记记录于B站的why老师,具体视频链接,在此感谢老师的悉心授课.我的github笔记地址 欢迎访问我的博客 My Blog: https://coderblue.cn/ Gi ...
- 当周杰伦把QQ音乐干翻的时候,作为程序猿我看到了什么?
点击蓝字关注我吧 1 别人都会唱了,而我还没付钱! 2019年9月16日晚23点整,周杰伦发布新歌<说好不哭>. 我经过一系列猛如虎的操作: 咦!这啥? 发生错误了?what the fu ...
最新文章
- 【转载】【贪心】各种覆盖问题
- 三巨头共聚AAA:ICapsule没有错,LeCun看好自监督,Bengio谈注意力
- python爬虫新手项目-给新手推荐几个实用又适合上手的Python爬虫项目
- Java FutureTask示例程序
- 数学差、物理差、英语又烂的放牛娃,后来竟成了清华校长,还做出了诺奖级的研究成果!...
- MySQL入门之触发器
- 【恋上数据结构】归并排序 + LeetCode真题
- mvn clean install时出现 java.lang.ClassCastException
- Python中默认参数self的理解
- 程序员面试金典——3.6双栈排序
- python入口文件详解_Python基础系列讲解——那些py文件中容易忽略的细节
- ubuntu18.04安装微信
- windows 搭建kms服务器激活_自建KMS激活服务器的技巧
- JVM内存模型及CMS、G1和ZGC垃圾回收器详解
- pod健康检查详解(liveness,readiness,滚动更新)
- java最好用的浏览器_国内好的pc浏览器评测
- openstack虚拟机无法获取IP地址
- flutter之路由管理
- 轻松实现iMessage群发
- 使能树莓派无线上网和SSH登录