
组合数学
文章平均质量分 63
伪伪的喵喵
就是这样。。喵。。
展开
-
排列组合。。。
公式。。。A(n, r) = n! / (n - r)! c(n, k) = c(n - 1, k) + c(n - 1, k - 1) c(n, r) = n! / ((n - r)! * r!)int my_C(int n, int m){ int sum = 1; for (int i = 1; i <= m; i++) { sum = sum *原创 2015-10-30 19:41:26 · 375 阅读 · 0 评论 -
LightOj 1067(Lucas)
lightoj 1067题目大意:求:(nm)%(1e6+3);\displaystyle{{n \choose m} \%(1e6+3)};思路:Lucas定理,组合打表#include <iostream>#include <cstdio>#define LL long long#define MOD 1000003#define N 1000005using namespace std原创 2016-05-20 15:16:44 · 265 阅读 · 0 评论 -
Lucas 定理。。。
定义推导。。。公式:C(n, m) % p = C(n/p, m/p) * C(n%p, m%p); (p为素数)用于求大组合数取模。。。数学证明: 令n = sp + q; m = tp + r ;(q, r <= p) ∵ C(p, i) ≡ 0 (mod p), i > 0 && i < p; ∴ (1 + x)^p) ≡ (1 + x^p) (mod p )左边x^(tp + r)原创 2015-10-31 02:27:43 · 480 阅读 · 0 评论 -
HDU 1808(鸽巢原理)
hdu 1808题目大意:已知mm堆糖果的数量,挑选其中一堆或多堆(可全选)的和恰好能被整除nn,如果存在输出任意种组合的序号,否则输出no sweets;思路:记录前缀和的取模nn的值为re[i].remre[i].rem;存在re[j].rem−re[i].rem=0re[j].rem - re[i].rem = 0;即说明ans=⎛⎝∑p=i+1ja[p]⎞⎠%n=0ans = \left(\原创 2016-04-20 20:14:43 · 814 阅读 · 0 评论 -
容斥原理
非递归形式LL d[] = {2, 3, 5, 7};LL get_ans(){ LL ans = 0, tmp, flag; for (int i = 1; i < (1 << 4); i++) //用二进制表示,0111,表示取2 3 5 { tmp = 1, flag = 0; for (int j = 0; j原创 2016-03-08 15:32:16 · 221 阅读 · 0 评论 -
HDU 5651(排列组合,逆元)
hdu 5615思路: len = 1, ans = 1; 统计每个字母出现个数,cnt_(奇数个个数的字母)>1; ans = 0;排列序列左端; 设 (a,b,c...z)=(n1,n2,n3...n26)(a, b, c...z) = (n_1, n_2, n_3...n_26), n=∑26i=1nin = \sum_{i=1}^{26}n_i; ans=n!n1!∗n2!∗...原创 2016-03-27 16:24:56 · 722 阅读 · 0 评论 -
HDU 4497(素数分解+排列组合)
hdu 4497题目大意:已知gcd(x,y,z)=G,lcm(x,y,z)=Lgcd(x, y, z) = G,lcm(x, y, z) = L;求这样的x, y, z有几种,其中(1,2,3)(3,2,1)(1, 2, 3)(3, 2, 1) 算两种;思路:因式分解G=ap11∗ap22∗...∗apkkG = {{a_1^{p_1}}*a_2^{p_2} *...*a_k^{p_k}};L=a原创 2016-04-08 15:06:14 · 575 阅读 · 0 评论 -
HDU 1695(容斥+欧拉函数+素数分解)
hdu 1695题目大意:求 xϵ(1,n)x \epsilon (1, n), yϵ(1,m)y \epsilon (1,m), gcd(x,y)=kgcd(x, y) = k的x,yx, y的对数;思路:令n<mn \lt mxϵ(1,n)x \epsilon (1, n), yϵ(1,n)y \epsilon (1,n), num1gcd(x,y)=φ(nk)num1_{gcd(x, y原创 2016-04-07 00:58:20 · 343 阅读 · 0 评论 -
HDU 3923(Polya)
hdu 3923题目大意:给定m种颜色,长度为n的项链,要求旋转和翻转不能重复,求方法数 ;模板题 + 逆元;#include <iostream>#include <cstdio>#define LL long long#define MOD 1000000007using namespace std;LL gcd(LL a, LL b){ return b == 0 ? a :原创 2016-03-30 21:12:42 · 353 阅读 · 0 评论 -
六角填数
标题:六角填数如图【1.png】所示六角形中,填入1~12的数字。使得每条直线上的数字之和都相同。图中,已经替你填好了3个数字,请你计算星号位置所代表的数字是多少?请通过浏览器提交答案,不要填写多余的内容。 思路:每个数字都被使用两次,即6 * x = (1 + 12) * 13 / 2 * 2; 即每一行的值x = 26; 两种思路,dfs()和使用STL里的全排列函数(next_perm原创 2016-03-18 16:02:15 · 469 阅读 · 0 评论 -
母函数。。。
普通母函数。。hdu 1028 模板题 整数拆分#include <iostream>#include <cstring>#include <cmath>#include <cstdlib>#include <cstdio>#include <algorithm>#include <queue>#include <stack>#include <string>#define LL原创 2015-10-29 01:07:39 · 304 阅读 · 0 评论 -
hdu 4045(组合数学,第二类斯特林数)
hdu 4045 题目大意:从n台机器中取r台,要求任意两台的序号差不小于k,再将这r台机器最多分为m组(每不为空),求共有多少种可能;思路: 在选中的r台机器两两间插入k - 1台机器; 例如:r = 3, k = 3 : 1 0 0 1 0 0 1 0 0 1 (1 为选中的) 剩余t = n - ((r - 1) * ( k - 1) + r) = n - ((r - 1) * k原创 2015-12-19 15:06:27 · 622 阅读 · 0 评论 -
poj 2049(polya)
poj 2049题目大意:m种颜色给长度为n的项链上色,要求旋转、翻转重合算一种,求总数;polya : 1/|G| * (m^c(a1) + m^c(a2) +…+ m^c(al))旋转:c(ai) = gcd(n, i) 翻转: n 为奇数,共有n个循环节数为(n + 1) / 2的循环群; n为偶数, 共有n / 2个循环节数为(n + 2) / 2的循环群,n / 2个循环节数为n /原创 2015-12-19 17:57:16 · 456 阅读 · 0 评论 -
hdu 5366(排列组合)
hdu 5366题目大意:一排有N块砖,在砖上放木人桩,每个木人桩之间至少隔两块砖,求共有多少种可能。思路: i = 1, ans = n; for i = 2 to (n+2)3(n+2) \over 3 left = n - (3 * i - 2); ans += c[lef+i][i];#include <iostream>#define N 60#define LL __int6原创 2015-12-22 15:07:02 · 409 阅读 · 0 评论 -
Stirling数。。
第一类 Stirling数。。S(n, k) 存在正负。。其绝对值表示将n个数分为k个环排列的数目。。 递推公式 S(n, 0) = 0; n >= 1; S(n, n) = 1; n >= 0; s(n, k) = s(n - 1, k - 1) + (n - 1) * s(n - 1, k) , 1 <= k <= n - 1 //第k个数自成环,前n - 1个成环 + 将第个k数原创 2015-10-31 00:18:32 · 389 阅读 · 0 评论 -
hdu 3951(博弈,成环)
hdu 3951(成环删除)题目大意:有n个点成环,每次可删除1~k个,无法操作者输。一次取完先手胜。 一次未取完,出现链,后手一次取完胜,或后手将其分为相等的两份胜。#include <iostream>#include <algorithm>#include <cstring>#include <cstdlib>#include <cmath>#define LL long long原创 2015-11-12 22:11:57 · 417 阅读 · 0 评论 -
hdu 5212(容斥)
hdu 5212(容斥)参考http://blog.youkuaiyun.com/lyhvoyage/article/details/45306211题目大意:给出n个数,求gcd(a[i], a[j]) * gcd(a[i], a[j] - 1)的和.两数互素,gcd(a[i], a[j]) * gcd(a[i], a[j] - 1)为0; 求任意一个以x为gcd的数对在数列中有k,则最多有k*k个数对的g原创 2015-11-15 16:15:14 · 298 阅读 · 0 评论 -
LightOj 1005
lightoj 1005题目大意:在n×nn \times n的棋盘里摆放kk个车,要求任意两个不在同一行同一列,问有几种方法;思路:从n×nn \times n个里挑一个,n−1×n−1n - 1 \times n - 1个里挑一个…共挑取kk个,再除去他们的顺序;sum=⎛⎝∏n−k+1ni⎞⎠2ksum = {\displaystyle{\left(\displaystyle\prod_{n-原创 2016-05-04 20:04:10 · 278 阅读 · 0 评论