题目

洛谷

题意

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′!1​b′!1​c′!1​d′!1​
很显然,是一个四元卷积,进行NTTNTTNTT求值即可。

Code:

咕咕咕

[TJOI2019]唱、跳、rap和篮球相关推荐

  1. 一个摄像头就能让虚拟人唱跳rap,抖音即可玩

    允中 发自 凹非寺 量子位 | 公众号 QbitAI 全身动作捕捉,现在无需昂贵的动捕设备,只要一个摄像头就能轻松实现. 并且就在抖音上,人人都能上手体验. 上面这段虚拟数字形象跳舞的视频采用了抖音直 ...

  2. 3D模型学会了「唱、跳、Rap、篮球」,程序员们全沉迷「鸡你太美」

    继 B 站之后,GitHub 网友也开始沉迷「鸡你太美」,让 3D 姿态也学会了「唱.跳.Rap.篮球」,而且动作准确度和连贯性似乎一点也不输练习时长两年半的练习生. 看了这段 demo 之后,网友戏 ...

  3. 我写小程序像菜虚鲲——1、唱,跳,rap,篮球

    引言 大家好,我是练习时长两年半的个人练习生菜虚鲲,我喜欢唱,跳,rap,篮球,Music! 为了避免律师含,就不po鲲鲲的原图咯~ 在小作坊待久了,都忘记自己的本职工作当初进来是一枚Android开 ...

  4. [TJOI2019]唱、跳、rap和篮球(指数型生成函数+NTT+卷积)

    文章目录 题目 题解 code1(NTT) code2(EGF+卷积) 题目 大中锋的学院要组织学生参观博物馆,要求学生们在博物馆中排成一队进行参观.他的同学可以分为四类:一部分最喜欢唱.一部分最喜欢 ...

  5. 练习时长两年半,二本学历,没背景,会唱跳篮球,美团四面成功拿下offer

    个人背景 又逢"金九银十",年轻的毕业生们满怀希望与忐忑,去寻找.竞争一个工作机会.已经在职的开发同学,也想通过社会招聘或者内推的时机争取到更好的待遇.更大的平台. 然而,面试人群 ...

  6. 长相酷似小强的小米「铁蛋」机器狗,售价 9999 元,打滚唱跳会空翻

    整理 | 禾木木 出品 | AI科技大本营(ID:rgznai100) 8月10日晚,雷军年度演讲及小米秋季发布会在线上召开,此次发布会足足讲了三个小时,不仅介绍了小米的目前市场状况,还分享了新品以及 ...

  7. Vue第一部分(2): 数据的渲染

    插值表达式 数据绑定最常见的形式就是使用 {{值}} (双大括号)的文本插值: <div id="app"><h1>{{msg}}</h1>&l ...

  8. Python多线程(自学必备 超详细)

    多线程技术 多任务 1.1 多任务的概念 多任务:在同一时间内执行多个任务[可以把每个任务理解为生活当中的每个活] 1.2 现实生活中的多任务 操作系统可以同时运行多个任务.比如,你一边打游戏,一边和 ...

  9. 带你从Vue入门到进阶

    系统学习前端Vue框架,笔记记录于B站的why老师,具体视频链接,在此感谢老师的悉心授课.我的github笔记地址 欢迎访问我的博客 My Blog: https://coderblue.cn/ Gi ...

  10. 当周杰伦把QQ音乐干翻的时候,作为程序猿我看到了什么?

    点击蓝字关注我吧 1 别人都会唱了,而我还没付钱! 2019年9月16日晚23点整,周杰伦发布新歌<说好不哭>. 我经过一系列猛如虎的操作: 咦!这啥? 发生错误了?what the fu ...

最新文章

  1. 【转载】【贪心】各种覆盖问题
  2. 三巨头共聚AAA:ICapsule没有错,LeCun看好自监督,Bengio谈注意力
  3. python爬虫新手项目-给新手推荐几个实用又适合上手的Python爬虫项目
  4. Java FutureTask示例程序
  5. 数学差、物理差、英语又烂的放牛娃,后来竟成了清华校长,还做出了诺奖级的研究成果!...
  6. MySQL入门之触发器
  7. 【恋上数据结构】归并排序 + LeetCode真题
  8. mvn clean install时出现 java.lang.ClassCastException
  9. Python中默认参数self的理解
  10. 程序员面试金典——3.6双栈排序
  11. python入口文件详解_Python基础系列讲解——那些py文件中容易忽略的细节
  12. ubuntu18.04安装微信
  13. windows 搭建kms服务器激活_自建KMS激活服务器的技巧
  14. JVM内存模型及CMS、G1和ZGC垃圾回收器详解
  15. pod健康检查详解(liveness,readiness,滚动更新)
  16. java最好用的浏览器_国内好的pc浏览器评测
  17. openstack虚拟机无法获取IP地址
  18. flutter之路由管理
  19. 轻松实现iMessage群发
  20. 使能树莓派无线上网和SSH登录

热门文章

  1. CVE-2013-3893 IE浏览器UAF漏洞分析
  2. 什么是指针?为什么要用指针?
  3. 谷歌云没有信用卡怎么注册服务器,谷歌云免费服务器申请方法
  4. 蓝色简约的工业大学学校网站静态模板
  5. 视频转成gif动图怎么操作?仅需三步在线完成视频转gif
  6. bat的errorlevel || bat判断语句是否执行成功
  7. Java类属性字段校验(validation的使用)
  8. 【ARM编程】ARM介绍
  9. 强化学习RL——多臂老虎机问题
  10. obsidian标题自动添加序号