本文引用于清华大学出版社卢开澄、卢华明《组合数学第五版》。

今天我们稍微讨论下圆排列以及$n$对夫妻的问题。

1.4圆周排列

这个问题是:从$n$个人中取$r$个在圆周上,我们用$Q(n,r)$表示这个答案。

类比简单的直线排列,不同之处在于首尾的处理,圆周情况可能会有很多重复。

不难理解,$Q(n,r)$=$P(n,r)$/$n$。

例1:5个男生,3个女生围一圆桌坐,按照上面的公式,代入我们可以得出式子:$8!$/8=$7!$。

   要求男生$B1$不和女生$G1$x相邻坐?考虑把$G1$排除,7个人围一圆桌,那么有$6!$种方案,$G1$插入有5种方法,所以根据乘法原理,总方案数为$5*6!$。

   要求3个女生不相邻?参考上一问的解题方法,排除他们仨,有$4!$种方案,3个女生依次插入,根据乘法原理,总方案数为$4!*5*4*3$。

例2:$n$对夫妻围一圆桌坐,求每队夫妻相邻而坐的方案数。

     考虑把夫妻二人进行捆绑,看成一个人,那么有$(n-1)!$种方案,因为夫妻左右坐是不定的,所以总方案数为$2^n*(n-1)!$。

例3:有12个人分两桌,每桌6人,围着圆桌而坐,有多少方案?  根据上面的式子,显然有$C(12,6)*(5!)^2$。

    12对夫妻平分为2桌,围圆桌而坐相邻有多少方案?   显然有$C(12,6)*(5!*2^6)^2$。

3.10 $n$对夫妻问题

我们要解决的,是$n$对夫妻围圆桌而坐,求夫妻不相邻的方案数。

这个问题运用了很综合的数论问题,需要用到容斥原理。

我们不妨把这个问题抽象成集合间的问题,令$A_i$表示第i对人坐在一起的集合

$ans=|\overline{A_1}\cap \overline{A_2}\cap \overline{A_3}\cap ...\overline{A_n}|$

(上面那个横线是取反的意思,就是$A_i$表示第i对人坐在一起的集合,那么带个横线就是表示第$i$对人不坐在一起。)

这就是一个容斥原理了。

以下我引用Chemist的题解==

再回顾一下$A_i$的含义,$A_i$表示第i对人坐在一起的集合,那么考虑只有一对人坐在一起有多少种情况呢,可以把这一对人看成一个人,反正他们总要坐在一起,问题就变成了$2n-1$个人围坐在圆桌上,共有$(2n-1-1)!$种情况,注意还要乘上一个2,因为这一对人可以换位,还要再乘上一个C(n,1),因为不同的一对人坐在一起的方案是不同的。其他的同理,这样我们就可以算出后面每个式子的具体值。

$ans=N-\sum_{i=1}^{n}|A_i|+\sum_{i=1}^{n}\sum_{j=i+1}^{n}|A_i\cap A_j|...+(-1)^n|A_1\cap A_2\cap A_3...\cap A_n|$

$=(2n-1)!-2C(n,1)(2n-2)!+2^2C(n,2)(2n-3)!...$

$=\sum_{i=0}^{n}(-1)^i2^iC(n,i)(2n-i-1)!$

ex:有男女各5人,其中3对是夫妻,沿10个位置的圆桌就座,若每对夫妻都要坐在相邻的位置,问有多少种坐法?

把夫妻继续捆绑,变成了7人,那么方案数就是$6!*2^3$

组合数学1.4&3.10 By cellur925的更多相关文章

  1. 八皇后问题---详解---参考<<紫书>>

    在一个8*8的棋盘上  放置八个皇后 , 使得他们互相不攻击(皇后攻击范围为 同行同列同对角线) , 方法一 : 从64个格子中 选一个子集 , 使得 " 子集 中恰好有八个元素 , 且任意 ...

  2. 2018.10.31 NOIP模拟 几串字符(数位dp+组合数学)

    传送门 如果观察到性质其实也不是很难想. 然而考试的时候慌得一批只有心思写暴力233. 下面是几个很有用的性质: c0,1+1≥c1,0≥c0,1c_{0,1 }+1 ≥ c_{1,0} ≥ c_{0 ...

  3. 2018.10.30 uoj#273. 【清华集训2016】你的生命已如风中残烛(组合数学)

    传送门 组合数学妙题. 我们把这mmm个数都减去111. 然后出牌的地方就变成了−1-1−1. 然后发现求出每个位置的前缀和之后全部都是非负数. 考虑在最后加入一个−1-1−1构成一个m+1m+1m+ ...

  4. 2018.10.25 bzoj4517: [Sdoi2016]排列计数(组合数学)

    传送门 组合数学简单题. Ans=(nm)∗1Ans=\binom {n} {m}*1Ans=(mn​)∗1~(n−m)(n-m)(n−m)的错排数. 前面的直接线性筛逆元求. 后面的错排数递推式本蒟 ...

  5. 2018.10.23 NOIP训练 Leo的组合数问题(组合数学+莫队)

    传送门 好题. 考察了莫队和组合数学两个知识板块. 首先需要推出单次已知n,mn,mn,m的答案的式子. 我们令f[i]f[i]f[i]表示当前最大值为第iii个数的方案数. 显然iii之后的数都是单 ...

  6. 2018.10.04 NOIP模拟 排队(组合数学)

    传送门 T2原题啊. 直接组合数学求出合法方案数,再除去一个(n+m)!(n+m)!(n+m)!: ans=0(n<m)ans=0(n<m)ans=0(n<m) ans=n+1−mn ...

  7. 2018.10.30 NOIP模拟 排列树(树形dp+组合数学)

    传送门 考试的时候乱搞过了. 其实题目就是让你求拓扑排序方案数. 直接树形dpdpdp然后组合数转移一下就行了. 乱搞代码

  8. 2018.10.25 bzo1227: [SDOI2009]虔诚的墓主人(组合数学+扫描线+bit)

    传送门 有点难调啊.其实是我自己sb了 不过交上去1A1A1A还是平衡了一下心态. 所以这道题怎么做呢? 我们考虑对于一个点(x,y)(x,y)(x,y)如果这个点成为中心,正左/右/上/下分别有l/ ...

  9. 2018.10.25 atcoder Leftmost Ball(计数dp+组合数学)

    传送门 dp妙题啊. 我认为DZYODZYODZYO已经说的很好了. 强制规定球的排序方式. 然后就变成了一个求拓扑序数量的问题. 代码: #include<bits/stdc++.h> ...

随机推荐

  1. MeiTuanLocateCity

    https://github.com/eltld/MeiTuanLocateCity

  2. Eureka vs Zookeeper

    著名的CAP理论指出,一个分布式系统不可能同时满足C(一致性).A(可用性)和P(分区容错性).由于分区容错性在是分布式系统中必须要保证的,因此我们只能在A和C之间进行权衡.在此Zookeeper保证 ...

  3. openwrt gstreamer实例学习笔记(一.初始化gstreamer)

    GStreamer 是一个非常强大而且通用的流媒体应用程序框架. GStreamer所具备的很多优点来源于其框架的模块化: GStreamer能够无缝的合并新的插件. 但是, 由于追求模块化和高效率, ...

  4. iOS优化策略

    之前写的一系列文章或者小经验一直没有时间去整理放在博客上,今天整理出来,之前是写在作业部落,语法是markdown,点击链接浏览,仅供参考,希望对你有帮助. https://www.zybuluo.c ...

  5. Xamarin Android 记事本(三)删改

    这篇我就不做太多的说明了,数据操作之前也都举过例子了,这里就直接贴出删除和修改的代码. public override bool OnOptionsItemSelected(IMenuItem ite ...

  6. Qt & opencv 学习(二)

    例子:打开图片并显示.打开图片利用Qt的标准文件对话框,第一步是利用OpenCV创建窗口并显示. 添加一个Button,转到信号槽添加代码: using namespace cv; Mat image ...

  7. 超全!整理常用的iOS第三方资源(转)

    超全!整理常用的iOS第三方资源 一:第三方插件 1:基于响应式编程思想的oc 地址:https://github.com/ReactiveCocoa/ReactiveCocoa 2:hud提示框 地 ...

  8. 如何用redis做到限制,一个手机号,1分钟内最多发一条,一天内最多10条

    需要两个缓存 key名称 phone-busy,缓存1分钟 key名称 phone-send-count,缓存1天,每成功发送一条+1 发送的时候流程如下: 判断phone-busy是否存在,存在直接 ...

  9. 序列化FastReport,重要提示少走弯路 good

    原本在开发一个报表插件,因为需要远程传输,因此需要序列化报表,序列化FastReport有两种方式, 1.仅序列化数据,由客户端接受到数据,并呈现报表,这种方式需要在客户端存储报表格式文件xxx.Fr ...

  10. (C)理解#define write(b,addr) (void)((*(volatile unsigned int *) (addr)) = (b))

      理解 #define write(b,addr) (void)((*(volatile unsigned int *) (addr)) = (b)) 嵌入式系统编程,要求程序员能够利用C语言访问固 ...