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

本文引用于清华大学出版社卢开澄.卢华明<组合数学第五版>. 今天我们稍微讨论下圆排列以及$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$排除…
在一个8*8的棋盘上  放置八个皇后 , 使得他们互相不攻击(皇后攻击范围为 同行同列同对角线) , 方法一 : 从64个格子中 选一个子集 , 使得 " 子集 中恰好有八个元素 , 且任意选出的两个格子都不是同一行,同一列同,一对角线"  , 这是子集枚举问题 , 然而 , 64个格子的自己有2^64个   ,   所需处理数据过大 ! 方法二:  从64个格子中 选八个格子 , 称为组合生成问题 , 根据组合数学 有 4.426*10^9中方案 , 虽然比第一种好 , 但是然并卵…
传送门 如果观察到性质其实也不是很难想. 然而考试的时候慌得一批只有心思写暴力233. 下面是几个很有用的性质: c0,1+1≥c1,0≥c0,1c_{0,1 }+1 ≥ c_{1,0} ≥ c_{0,1}c0,1​+1≥c1,0​≥c0,1​,因为$ 10, 01 $是交替出现的. c1,0+c0,0c_{1,0 }+c_{0,0}c1,0​+c0,0​是000出现的次数. c0,1+c1,1+1c_{0,1}+ c_{1,1}+1c0,1​+c1,1​+1 是111 出现的次数. 由于满足条…
传送门 组合数学妙题. 我们把这mmm个数都减去111. 然后出牌的地方就变成了−1-1−1. 然后发现求出每个位置的前缀和之后全部都是非负数. 考虑在最后加入一个−1-1−1构成一个m+1m+1m+1个数的序列. 那么对于这个序列的所有循环同构. 只有当前这种是合法的. 原因很简单. 最后一个位置的前缀和是−1-1−1,因此除了当前这种之外的循环同构必定有一个前缀和是负数. 反过来发现对于每一个不合法的,它一定有一个循环同构是合法的. 对于这个序列的总方案数只有m!m!m!种. 然后最后一个数…
传送门 组合数学简单题. Ans=(nm)∗1Ans=\binom {n} {m}*1Ans=(mn​)∗1~(n−m)(n-m)(n−m)的错排数. 前面的直接线性筛逆元求. 后面的错排数递推式本蒟蒻竟然推出来了. 首先说说为什么Ans=(nm)∗1Ans=\binom {n} {m}*1Ans=(mn​)∗1~nnn-mmm的错排数. 考虑首先选出mmm个排列正确的数有(nm)\binom {n} {m}(mn​)种选法. 然后剩下的n−mn-mn−m个数因为有严格的大小关系相当于只需要保证…
传送门 好题. 考察了莫队和组合数学两个知识板块. 首先需要推出单次已知n,mn,mn,m的答案的式子. 我们令f[i]f[i]f[i]表示当前最大值为第iii个数的方案数. 显然iii之后的数都是单调递减且连续的. 所以后面的方法是1种. 考虑第111~i−1i-1i−1个位置. 显然放法数为∑j=1i−1f[j]\sum _{j=1} ^{i-1}f[j]∑j=1i−1​f[j] 又因为f[1]=1,f[i−1]=∑j−1i−2f[j]f[1]=1,f[i-1]=\sum _{j-1} ^{…
传送门 T2原题啊. 直接组合数学求出合法方案数,再除去一个(n+m)!(n+m)!(n+m)!: ans=0(n<m)ans=0(n<m)ans=0(n<m) ans=n+1−mn+1(m≤n)ans=\frac {n+1-m} {n+1} (m\le n)ans=n+1n+1−m​(m≤n) 代码…
传送门 考试的时候乱搞过了. 其实题目就是让你求拓扑排序方案数. 直接树形dpdpdp然后组合数转移一下就行了. 乱搞代码…
传送门 有点难调啊.其实是我自己sb了 不过交上去1A1A1A还是平衡了一下心态. 所以这道题怎么做呢? 我们考虑对于一个点(x,y)(x,y)(x,y)如果这个点成为中心,正左/右/上/下分别有l/r/u/d/l/r/u/d/l/r/u/d/棵树,那么对于这个点Ans=(lk)∗(rk)∗(uk)∗(dk)Ans=\binom {l} {k}*\binom {r} {k}*\binom {u} {k}*\binom {d} {k}Ans=(kl​)∗(kr​)∗(ku​)∗(kd​) 发现离散…
传送门 dp妙题啊. 我认为DZYODZYODZYO已经说的很好了. 强制规定球的排序方式. 然后就变成了一个求拓扑序数量的问题. 代码: #include<bits/stdc++.h> using namespace std; inline int read(){ int ans=0,w=1; char ch=getchar(); while(!isdigit(ch)){if(ch=='-')w=-1;ch=getchar();} while(isdigit(ch))ans=(ans<…