随笔分类 -  ACM——组合数学

摘要:题意:给你一个序列a,求序列b满足 ①1<=bi<=ai ②对于序列b[l,r] gcd(bl,...,br)>=2的序列数是多少 思路:显然这道需要我们枚举gcd 设F(d)是序列b满足gcd是d的倍数的个数 F(d)的结果显而易见为∏a[i]/d 根据容斥原理ans=F(2)+F(3)+F(5) 阅读全文
posted @ 2017-08-02 16:38 simpleknight 阅读(218) 评论(0) 推荐(0)
摘要:题意:求a<=x<=b ,x<=y<=d,中gcd(x,y)==k的数对个数 思路:题目可以转化成求1<=x<=b/k,1<=y<=d/k中gcd(x,y)=1的数对的个数 我们设f(d)表示恰好gcd(x,y)==d的个数,F(d)表示gcd为d的倍数的数对个数 F(n)=∑d|nf(d)=> f 阅读全文
posted @ 2017-07-31 20:14 simpleknight 阅读(209) 评论(0) 推荐(0)
摘要:题意:度度熊最近很喜欢玩游戏。这一天他在纸上画了一个2行N列的长方形格子。他想把1到2N这些数依次放进去,但是为了使格子看起来优美,他想找到使每行每列都递增的方案。不过画了很久,他发现方案数实在是太多了。度度熊想知道,有多少种放数字的方法能满足上面的条件? 思路: 思路基本没有,看的其他人的题解才知 阅读全文
posted @ 2017-06-28 16:16 simpleknight 阅读(478) 评论(0) 推荐(0)
摘要:卡特兰数: 1 通项公式:h(n)=C(n,2n)/(n+1)=(2n)!/((n!)*(n+1)!) 2递推公式:h(n)=((4*n-2)/(n+1))*h(n-1); h(n)=h(0)*h(n-1)+h(1)*h(n-2)+...+h(n-1)*h(0). 3前几项为:h(0)=1,h(1) 阅读全文
posted @ 2017-06-27 18:56 simpleknight 阅读(373) 评论(0) 推荐(0)
摘要:题意:c( n, m)%M M = P1 * P2 * ......* Pk (其中Pk是素数) 思路:Lucas定理中C(n,m)%M,M必须是素数,当M不是素数时,我们可以把它拆成素数的乘积 如果x=C(n,m)%M ,M=p1*p2*..*pk; a[i]=Lucas(n,m)%pi; xΞa 阅读全文
posted @ 2017-06-13 11:48 simpleknight 阅读(269) 评论(0) 推荐(0)
摘要:题意:求C (n,0),C (n,1),C (n,2)...C (n,n).奇数的个数 思路:我们分析C(n,m)%2,那么由Lucas定理可知,n和m可以写成二进制的形式,假设n=1001101,那么m是0~1001101,我们知道C(0,1)=0,因此如果n=1001101的0对应位置的m二进制 阅读全文
posted @ 2017-06-12 18:42 simpleknight 阅读(261) 评论(0) 推荐(0)
摘要:题意:给你一个杨辉三角,每一行和每一列都是从0开始,给两个数n,k,代表杨辉三角的第n行第k列,和一个素数p,让你计算从(0,0)走到(n,k)的最小花费sum%p; 思路:让花费尽量小,那就让走过的1尽量多,我们可以有两种走法 第一种:先向下走再斜着走 第二种:想斜着走再向下走 第一种分析:我们走 阅读全文
posted @ 2017-06-11 20:35 simpleknight 阅读(454) 评论(0) 推荐(1)
摘要:题意:给你一个置换P,问是否存在一个置换M,使M^2=P 思路:资料参考 《置换群快速幂运算研究与探讨》 https://wenku.baidu.com/view/0bff6b1c6bd97f192279e9fb.html 结论一: 一个长度为 l 的循环 T,l 是 k 的倍数,则 T^k 是 k 阅读全文
posted @ 2017-03-30 18:10 simpleknight 阅读(465) 评论(0) 推荐(0)
摘要:题意:给你一个数列,第i号位置的数位a[i],现在将数列进行交换,交换规则为a[i]=a[a[i]];已知交换s次之后的序列,求原先序列 思路:置换的问题必然存在一个循环节,使一个数列交换n次回到原来的数列上,我们只需要模拟交换找到循环节长度len,将已知的交换后的序列,则再进行 (len - s% 阅读全文
posted @ 2017-03-30 13:23 simpleknight 阅读(239) 评论(0) 推荐(0)
摘要:题意:给你一堆无序的数列p,求k,使得p^k=p 思路:利用置换的性质,先找出所有的循环,然后循环中元素的个数的lcm就是答案 代码: 阅读全文
posted @ 2017-03-29 19:48 simpleknight 阅读(307) 评论(0) 推荐(0)
摘要:题意:给你一个无序数列,让你两两交换将其排成一个非递减的序列,每次交换的花费交换的两个数之和,问你最小的花费 思路:首先了解一下什么是置换,置换即定义S = {1,...,n}到其自身的一个双射函数f。那么我们将其写为若干个不相交的循环的乘积形式(A1, A2, ... Ap1)(B1, B2, . 阅读全文
posted @ 2017-03-28 18:29 simpleknight 阅读(218) 评论(0) 推荐(0)
摘要:题意:给你一个由'('和')'组成的字符串,问你有多少个子串,前半部分是由'('组成后半部分由')'组成 思路:枚举这个字符串中的所有'('左括号,它左边的所有'('左括号的个数为num1,它的右边的所有’)'右括号的个数为num2, 根据范德蒙恒等式计算得出 代码: 阅读全文
posted @ 2017-03-23 13:16 simpleknight 阅读(501) 评论(0) 推荐(0)
摘要:题意:有n个人,选不少于一个人参加比赛,其中一人当队长,有多少种选择方案。 思路:我们首先C(n,1)选出一人当队长,然后剩下的 n-1 人组合的总数为2^(n-1),这里用快速幂解决 代码: 阅读全文
posted @ 2016-12-11 23:36 simpleknight 阅读(268) 评论(0) 推荐(0)
摘要:题意:给你N个数,求把他们的全排列加和为多少 思路:对于这道题,假设数字k1在第一位,然后求出剩下N-1位的排列数num1,我们就可以知道k1在第一位时 排列有多少种为kind1, 同理,假设数字k2在第一位然后求出剩下N-1位的排列数num2, 我们就可以知道k2在第一位时的排列有多少种为kind 阅读全文
posted @ 2016-12-11 22:53 simpleknight 阅读(564) 评论(0) 推荐(0)