
ACM_组合数学
羁绊残阳
四川大学计算机科学与技术
展开
-
SCU2016-01 L 集合容斥原理
Analyse: 首先回去考虑正面算,但是发现情况太复杂,重合也太多。 从反面来考虑。 组合递推公式:Cmn=Cmn−1+Cm−1n−1C_n^m = C_{n-1}^m + C_{n-1}^{m-1} 在没有限制的时候的全集U=CknU=C_n^k,然后令:A表示不选第一行,…..,D表示不选第一列。 求的结果就是:U−A∪B∪C∪DU - A \cup B \cup C \cup D原创 2016-07-05 22:43:44 · 333 阅读 · 0 评论 -
hdu 3037 插板法组合 + lucas定理
分析:插板法解决的问题: a1+a2+a3+.....+an=ma_1 + a _ 2 + a_3+.....+a_n = m 如果aia_i必须是正整数,Cn−1m−1C_{m-1}^{n-1}。 如果aia_i是非负数,先强制选11转化为正整数Cn−1m−1+nC_{m-1+n}^{n-1} 扩展,对于每个数最小为多少都可以通过先强行加减的方法把它转化为,正整数问题。 lucas定理:原创 2016-08-03 23:15:17 · 358 阅读 · 0 评论 -
hdu3929 容斥+扩展Lucas定理
分析:根据扩展lucas定理,(1+x)n(1+x)^n含有的奇数项的个数是nn的二进制表达中数字1的个数。 i & -i得到的是ii的二进制表达最右边的11的位置代表的十进制值。我们每次都减去它一个1,这样就有个函数可以算1的个数。 函数实现如下:int get1(int x) { return x ? get(x - (x & -x)) + 1 : 0; }接下来容斥。#includ原创 2016-09-23 00:11:45 · 487 阅读 · 0 评论 -
hdu 1695 欧拉函数 + 容斥原理
分析:本质是求区间内与某个数互质的数的个数,如果区间比这个数小用欧拉函数。比这个数大用全集减去不互质的个数。不互质的个数的计算方法是对当前数进行因数分解,然后求能被p1∪p2∪......∪pnp_1 \cup p_2 \cup ......\cup p_n整除的数的个数,显然用容斥。#include <cstdio> #include <cstring> #include <iostream> #原创 2016-09-23 17:22:47 · 375 阅读 · 0 评论 -
hdu5072 数论 + 容斥
分析:求同色三角形的个数,我们用的是逆转换成求不同色三角形的个数,对于每个顶点,只要和它相连的两个边不同色,它就一定可以组成一个不同色三角形,而且一个三角形会被两次计算。所以一个顶点对不同色三角形的贡献是:prime∗(n−1−unprime)/2prime * (n - 1 - unprime) / 2 问题就转化成了求与一个数不互为质数的数的个数。可以对这个数质因数分解,然后容斥的减去所有含有原创 2016-09-21 11:42:18 · 363 阅读 · 0 评论 -
hdu2841 容斥
分析:整数平面坐标系在原点连线上的点,第一对互质,其它都是倍数。 所以就是[1,n][1,n]和[1,m][1,m]间互质的数的个数。 枚举[1,n][1,n]的数,分解质因数,容斥不互质的求反即可。复杂度O(n2phi(n))O(n2^{phi(n)})#include <cstdio> #include <cstring> #include <iostream> #include <algo原创 2016-09-26 00:16:06 · 346 阅读 · 0 评论 -
hdu 1796容斥原理
分析:就是区间不互质的个数,但是这里注意mm个数不一定都是素数,所以用lcm扩展增加,保证每次增加是素数。#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; #define pr(x) cout << #x << ": " << x << " " #d原创 2016-09-26 22:33:26 · 375 阅读 · 0 评论 -
hdu 2204 容斥原理
分析:根据指数乘法原理:xab=xabx^{ab}={x^a}^b 所以指数必须是质数,切质数显然应该小于等于2632^{63}。 但是这些质数并不是完全互质的,所以要用容斥原理来做。 这里计算一个指数有多少个可行的数使用的开根号运算符pow(n,1.0/x)+1e−8pow(n, 1.0 / x) + 1e-8加上浮点误差避免。#include <cstdio> #include <cstr原创 2016-10-04 14:59:07 · 434 阅读 · 0 评论 -
hdu 4135 容斥
分析:互质的经典容斥,没啥可说的。#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; #define pr(x) cout << #x << ": " << x << " " #define pl(x) cout << #x << ": " << x原创 2016-10-04 15:29:40 · 560 阅读 · 0 评论