组合数学学习笔记
p3744. 打扑克
直接递推了。
p3745. combination
使用卢卡斯定理切掉。
long long c(long long n,long long m) { return f[n]*g[m]*g[n-m]%mod; } long long lcs(long long n,long long m) { if(m==0) return 1; return lcs(n/mod,m/mod)*c(n%mod,m%mod)%mod; }
3342. 【模板】卢卡斯定理/Lucas 定理
同上,只用改取模和输入。
P118. 「一本通 6.1 练习 3」越狱
结论:一共有 种可能,不可以越狱的可能,一共有 种。所以答案是二者相减。
原本需要扩展欧拉定理去算幂取模,但是对于这道题,快速幂解决即可。
p3749. Rooks LightOJ - 1005
对于 列,有 个需要摆放;对于 行,也需要摆放 个.
所以最终答案数是
要开 。
P2280. 牡牛和牝牛
据说有 DP 做法,但是我不会。。
所以我选择组合数学推结论(洛谷上说不用卢卡斯定理,但是我还是用了)
结论:
对于 ,卢卡斯秒了。但是好像不用。。。
3328. [ABC156E] Roaming
有点小难。。。
考虑 次移动后的空房子的最大值,显然是 ,但是 有可能大于 ,所以是 个,对于每个 ,答案个数是 (感性理解一下)
考虑 次移动后有人的房子,即是对于每个 个人会插在 个地方,答案个数是 ,注意这里是 而不是 。。。
最终结果即是
p3751. X-factor Chain
结论题。
——msb大佬
输出的长度就是 的质因数个数(有重复)。
而第二个序列的个数就有一点难搞了:
从容斥的角度去想,这 个质因数想要排满,第一位有 种,第二位有 种,第 位就有 种,总共有 种。
那么考虑以下情况:如果最后一位是 ,那么前面的每一位都要有这个 ,那么对于每一个 ,就有 种不合法的结果。( 代表第 个质因数出现的个数)
即最终答案是:
中间的细节,我没有记录每一个阶乘,都是现算的,但是能过。
P526. [HNOI2012]排队
纸张高精,抄的结论。
P2022. [Sdoi2016]排列计数
和上面的难度一样,都是绿题,但是这道题我一节课就推出来了。
首先,考虑先排在原位的数,即 的那 个,显然,有 种。
接下来,考虑排剩下的不在原位的 个数,这里要求在剩下的位置里, ,可以考虑错排法,结论:
证明可参考课件。
我们在处理 的时候,需要用数组记忆化,处理 的时候,要用费马小定理求逆元。
最终答案即为:
P515. [ZJOI2010]Perm 排列计数
很有意思。题目的叙述转换成图论模型就是:求大小为 的小根堆有多少个。
需要树上 ,用 算答案。
P2281. BZOJ 4403序列统计
依然是组合数。但是 的时候要有边界。。
3327. [ABC172E] NEQ
排列+错排。
考虑序列 的个数,显然是 种。
那么题目上说要求
显然,B 序列是 A 的错排。在通常的定义中,错排 是针对于有 个可选数、且序列长度为 的。
但是这里是有 个可选数、且序列长度为 ,并有 。
可以考虑加法原理,即 序列的选择数一定是 的形式,这里可以找个例子来理解一下:
若 ,则 序列的个数为 。
对于一个 , 的全部合法序列为:
总共 种。可以看出,除过与 序列元素相同的排法,在第 位上,会有 个 序列中没有的元素,在本例中即是数字 。而对于剩下 位,有 种排法。
所以这道题的答案是错排公式是改编版( 代表题中给出数据 ) :
P514. [SDOI2010] 古代猪文
小数论全家桶。但是比较简单。
答案显然是
但是直接使用逆元求 会炸时空。我们考虑扩展欧拉定理:
且由于 是个质数,所以
所以上式等价于:
但 是个合数,所以我们把它进行质因数分解,这样就可以用 lucas 去求 ,然后用中国剩余定理合并答案即可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!