随笔分类 - ACM——组合数学
摘要:题目:HDU 3037 题意:有n个树,m个坚果,放到n个树里,可以不放完,有多少种方法。 分析: 得到组合数了。 大组合数什么费马小定理,Lucas定理都来了; 总的说,不能用二维地推了,用的却是组合数的定义。 一般来说大组合通常要取模。 那么不能边乘边模,边除边模,等式不会成立。 根据逆元,除以
阅读全文
摘要:题意:一排n长度的砖,有四种颜色,红色绿色是偶数,有少染色方式。 分析: 泰勒展开式: chx = (e^x+e^(-x))/2 = 1 + x^2/2! + x^4/4! + x^6/6! + ... ...shx = (e^x-e^(-x))/2 = x + x^3/3! + x^5/5! +
阅读全文
摘要:题意:给一个a数组,求b 数组的方案数,但是要求两者乘积相同。 分析: 不可能将它们乘起来,对于每个数质因数分解,得到每个质因子个数,遍历这些质因子,将某个质因子放到 对应的盒子里面,可以不放,方案数就是一个组合数,用插板法。 这里的素数板子挺好的,一方面可以用来判断,一方面存起来。 组合数,可以考
阅读全文
摘要:这是一道论文题。 题意:选出第k个无平方因子的数。 思路:二分答案。 某一个区间的无平方因子的数的个数怎么求呢? 可以筛。 这里可以莫比乌斯。 首先什么是莫比乌斯函数呢? 回到本题: 他是一个莫比乌斯函数的应用。 对于1~ mid 中,不含平方因子的个数为: n - sum(i^2) 其中 i 为素
阅读全文
摘要:给定一个区间 [n,m],求有多少个数不含平方因子。 首先 求出不超过m的所有素数p,用p^2筛掉 [n,m] 之间的所有倍数。 欧拉公式求出素数表。 用素数的p^2筛选。
阅读全文
摘要:计算完后为 f(x): 根据我翻高数书,终于推倒出来了。 (~ ̄▽ ̄)~
阅读全文
摘要:#include <bits/stdc++.h> using namespace std; typedef long long LL; int gcd(int a,int b) { return b ==0 ? a : gcd(b,a%b); } const int maxn = 55; int m
阅读全文
摘要:题意:有一个n个按钮的锁,按下一些按钮打开门,有多少开门方式,其中,一些按钮可以选,可以不选,选中的按钮 可以分成一些集合,集合之间无序,是同时按下的。 分析: 1、首先选择 i 个按钮,组合数 2、枚举分成的集合 3、i 个按钮分成无序集合,第二类斯特林数 4、集合之间有序,排列数 #includ
阅读全文
摘要:题意:有n个药片,每次吃半片,吃2n天,那么有多少种吃法。 分析:如果说吃半片,那么一定要吃过一整片,用 ) 表示吃半片,用 ( 表示吃整片,那么就是求一个正确的括号匹配方案数,即卡特兰数。 卡特兰数可以DP,也有一重循环的地推表达式:Catalan(n) = 2(2n-1)*Catalan(n-1
阅读全文
摘要:题意:进制问题 分析: 打表,但是要用不能 long long 型,超内存。 n! = log_{10}\sqrt{2{\pi}n} (\frac{n}e)^n 精度要求 include include include using namespace std; const double PI = a
阅读全文
摘要:#include <bits/stdc++.h> using namespace std; long long abs_(long long a,long long b) { if(a>=b) return a-b; else return b-a; } int main() { int t; sc
阅读全文
摘要:题意:给出n个数,和m(1<=m<=200 000 000),求1~M中能被这n个数其中任意一个数整除的个数; 分析:n范围很小,可以枚举选择被哪些数整除,被奇数个整数整除加m/这个n个数的公共最小公倍数; 1 #include <bits/stdc++.h> 2 3 using namespace
阅读全文
摘要:基本原理: n+1个鸽子放到n个笼子里,至少有一个笼子里有两只及其以上的鸽子。若有n个笼子,kn+1个鸽子,至少有一个笼子里面有k+1个鸽子; 题意:给定N个数,挑出一些数,他们和和是n的整数倍; 分析: 对前缀和%n,余数为1~n,(0满足)相等处则产生解; 1 #include <iostrea
阅读全文
摘要:错排递推公式: d(n) = (n-1)*(d[n-1]+d[n-2]); 证明:将第n个元素放到第k处,第k处的元素如果放到第n处,就是d(n-2),否则,先假设放到第n处,然后错排,就是d(n-1); 1 #include <bits/stdc++.h> 2 3 using namespace
阅读全文
摘要:题目链接:http://codeforces.com/gym/101147/problem/G 题意:n个人,去参加k个游戏,k个游戏必须非空,有多少种放法? 分析: 第二类斯特林数,划分好k个集合后乘以阶乘; 1 #include <bits/stdc++.h> 2 3 using namespa
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3625 题意: n个房间,房间里面放着钥匙,允许破门而入k个,拿到房间里面的钥匙后可以打开对应的门,但是1号门不能破门而入,求这样检查完所有房间,概率是多少? 分析: 钥匙随机放到房间,全排列有n!; n
阅读全文
摘要:方法一: DFS 方法二:生成函数 每个数可以重复一定次数,求排列组合数,这是裸的指数型生成函数; 1 #include <bits/stdc++.h> 2 3 using namespace std; 4 5 double c1[15],c2[15]; 6 int a[15]; 7 int num
阅读全文
摘要:分析: 组成单词好说,价值如何体现? 改变指数就行,例如: 这样,组成的单词,指数就是权值,多项式相乘,指数小于50的就OK; 1 #include <bits/stdc++.h> 2 3 using namespace std; 4 5 int ch[30]; 6 int a[100]; 7 in
阅读全文