组合数学
分享关于组合数学的知识
MangataTS
一个爱折腾的Coder
展开
-
AcWing 889. 满足条件的01序列(卡特兰数)
题目连接 https://www.acwing.com/problem/content/891/ 思路 因为有n个1和n个0,那么最后一定能走到点(n,n),我们正面去想不太好想,所以我们可以看看中间出现1的数量比0多的情况,对于这个放法我们可以化成一个平面图,1表示向右走一步,0表示向上走一步,那么对于我们现在要求的反面就是要经过y=x+1y=x+1y=x+1这一条线的方案数,我们可以对这条线做(n,n)的一个对称图形也就是(n-1,n+1),我们会发现这个一个位置的方案数为:C2nn−1C_{2n}^{原创 2022-02-15 21:11:16 · 211 阅读 · 0 评论 -
AcWing 888. 求组合数 IV(高精度求组合数问题)
题面连接 https://www.acwing.com/problem/content/890/ 思路 因为要用到高精度,那我们直接使用python就好,如果不使用python,那么我们可以将a!a!a!和b!b!b!进行一个质因子拆分操作,最后再使用高精度乘法将这些质数的质因子质数的值全部乘上就好 代码 python import math a,b=map(int,input().split()); b=max(b,a-b); ans=1; for i in range(a-b+1,a+1): a原创 2022-02-15 21:06:45 · 527 阅读 · 0 评论 -
AcWing 887. 求组合数 III(Lucas定理)
题面连接 https://www.acwing.com/problem/content/description/889/ 思路 我们会发现我们的模数要远小于我们要求得组合数,并且模数p是一个质数,那么我们就可以使用lucas定理来帮我们快速求解次问题,Lucas定理:Cab mod p=Ca mod pb mod p×lucas(a/p,b/p) mod pC_a ^b \ mod\ p = C_{a \ mod \ p} ^原创 2022-02-15 21:06:08 · 337 阅读 · 0 评论 -
AcWing 886. 求组合数 II(预处理阶乘)
题目链接 https://www.acwing.com/problem/content/description/888/ 思路 这一个数据范围更加大,那么我们此时用递推式肯定是不行了,因为存不下,二来是复杂度太高,所以我们可以从组合数的定义出发:Cab=a!(a−b)!×b!C_a^b=\frac{a!}{(a-b)!\times b!}Cab=(a−b)!×b!a!,那么我们现在只需要将1e5以内的所有阶乘和阶乘的逆预处理出来就好啦,所以这个问题也就解决了 代码 #include<bits/st原创 2022-02-15 21:02:49 · 325 阅读 · 0 评论 -
AcWing 885. 求组合数 I(递推式预处理)
题面连接 https://www.acwing.com/problem/content/887/ 思路 通过组合数学的知识我们能知道Cab=Ca−1b+Ca−1b−1C_a^b = C_{a-1}^b + C_{a-1}^{b-1}Cab=Ca−1b+Ca−1b−1的,等式的右边表示的是从a−1a-1a−1个数中选取b−1b-1b−1个数以及从a−1a-1a−1个数中选取bbb个数的情况,分别对应了当前第bbb个数选择和不选择的情况(好像和背包的思想有点相似),然后我们就能通过递推式来求得2000以内原创 2022-02-15 21:01:50 · 199 阅读 · 0 评论 -
小沙的数数(组合数学+位运算)
题面链接 https://ac.nowcoder.com/acm/contest/23477/H 思路 根据异或运算的性质我们能 代码 #include<bits/stdc++.h> using namespace std; //----------------�Զ��岿��---------------- #define ll long long #define mod 1000000007 #define endl "\n" #define PII pair<int,int>原创 2022-02-05 13:19:43 · 273 阅读 · 0 评论 -
stone (组合数学 + Lucas定理)
传送门 解题思路:第i组的人数必须大于Ci,于是我们可以将问题转化为\(N-\sum_{i=1}^M Ci\)人分到M组中,且保证每一组的人数大于0,然后我们可以使用隔板法求出分的的组数\(C_{N-1-\sum_{i=1}^M Ci}^{m-1}\) 我们可以直接通过基本的组合公式+费马小定理直接求,也可以通过Lucas定理求得: 直接求: Code: #include<bits/std...原创 2021-01-26 13:58:00 · 482 阅读 · 1 评论