#include<stdio.h> #include<algorithm> using namespace std; void cal(int n,int m) { ; m=min(m,n-m); int j=m; ;m--,i--) { ans*=i; } ;i<=j;i++) { ans/=i; } printf("%I64d\n",ans); } int main() { int _case; int n,m; scanf("%d"…
通过阶段性计算减少一次性的大值计算 #include <stdio.h> int main() { int t, a, b, i; __int64 c; scanf("%d", &t); while(t--) { scanf("%d%d", &a, &b); if(a < b) printf("0\n"); else { c = ; ; i <= b; i++) c = c * (a - i + )…
Problem Description 开学了,杭电又迎来了好多新生.ACMer想为新生准备一个节目.来报名要表演节目的人很多,多达N个,但是只需要从这N个人中选M个就够了,一共有多少种选择方法? Input 数据的第一行包括一个正整数T,接下来有T组数据,每组数据占一行. 每组数据包含两个整数N(来报名的人数,1<=N<=30),M(节目需要的人数0<=M<=30) Output 每组数据输出一个整数,每个输出占一行 Sample Input 5 3 2 5 3 4 4 3 6…
---恢复内容开始--- Hearthstone Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 1102    Accepted Submission(s): 544 Problem Description Hearthstone is an online collectible card game from Blizzard Ente…
字串数 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 3187    Accepted Submission(s): 757 Problem Description 一个A和两个B一共可以组成三种字符串:"ABB","BAB","BBA".给定若干字母和它们相应的个数,计算一共可以组成多…
罗列出从n中取k个数的组合数组. 首先,求C(n,k)这个实现,很粗糙,溢出也不考虑,好的方法也不考虑.笨蛋.心乱,上来就写.. 另外,发现在递归中,不能申请太大的数组?貌似不是这个问题,是我自己越界了. /** * Return an array of arrays of size *returnSize. * The sizes of the arrays are returned as *columnSizes array. * Note: Both returned array and…
Ping pong Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1143    Accepted Submission(s): 387 Problem Description N(3<=N<=20000) ping pong players live along a west-east street(consider the str…
对于C(n, m) mod p.这里的n,m,p(p为素数)都很大的情况. 就不能再用C(n, m) = C(n - 1,m) + C(n - 1, m - 1)的公式递推了. 一般lucas定理的p不能大,在1e6以内,一下代码应该可以吧 typedef long long LL; using namespace std; LL exp_mod(LL a, LL b, LL p) { LL res = ; ) { ) res = (res * a) % p; a = (a*a) % p; b…
快速求排列组合C(m,n)%mod 写在前面: 1. 为防止产生n和m的歧义,本博文一律默认n >= m 2. 本博文默认mod = 10^6+3 3. 本博文假设读者已知排列组合公式 C(m,n)=n!(n−m)!∗m! 4. 普通的小数据就不用多说了,直接用公式,当然别忘了取模 C(m,n)=C(m−1,n−1)+C(m,n−1) 现在我们讨论当n可达10^9数量级大小时的算法. 步骤一:我们先把分子阶乘写成以下形式 n!=X∗modY 步骤二:对分母元素乘机求逆元.此时我们假设得到了以下方…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4497 题意:已知GCD(x, y, z) = G,LCM(x, y, z) = L.告诉你G.L,求满足要求的(x, y, z)有多少组,并且要考虑顺序. 思路:如果L%G != 0显然不存在这样的(x, y, z),相反肯定存在.具体做法就是将L/G分解质因子,得到:L/G = P1^t1 * P2^t2 * ... * Pk^tk,我们来考虑任意一个因子Pi^ti,此时(x/G, y/G, z/…
排列组合是数学中的一个分支.在计算机编程方面也有非常多的应用,主要有排列公式和组合公式.错排公式.母函数.Catalan Number(卡特兰数)等. 一.有关组合数学的公式 1.排列公式   P(n,r)=n!/r! 2.组合公式   C(n,r)=n!/(r!*(n-r)!)  C(n,r)=C(n-1,r)+C(n-1,r-1) 3.错排公式   d[1]=0;   d[2]=1; d[n]=(n-1)*(d[n-1]+d[n-2]) 4.卡特兰数 前几项:1, 2, 5, 14, 42,…
[题意]给定n,求Σi=0~nΣj=1~i s(i,j)*2^j*j!,n<=10^5. [算法]生成函数+排列组合+多项式求逆 [题解]参考: [BZOJ4555][Tjoi2016&Heoi2016]求和-NTT-多项式求逆 $ans=\sum_{i=0}^{n}\sum_{j=0}^{i}s(i,j)*2^j*j!$ 令$g(n)=\sum_{j=0}^{n}s(n,j)*2^j*j!$ 则ans是Σg(i),只要计算出g(i)的生成函数就可以统计答案. g(n)可以理解为将n个数划分…
排列组合 Time Limit: 1000MS   Memory Limit: 32768KB   64bit IO Format: %I64d & %I64u Submit Status Description 有n种物品,并且知道每种物品的数量.要求从中选出m件物品的排列数.例如有两种物品A,B,并且数量都是1,从中选2件物品,则排列有"AB","BA"两种.    Input 每组输入数据有两行,第一行是二个数n,m(1<=m,n<=10)…
// 排列组合+组合数取模 HDU 5894 // 题意:n个座位不同,m个人去坐(人是一样的),每个人之间至少相隔k个座位问方案数 // 思路: // 定好m个人 相邻人之间k个座位 剩下就剩n-(m+1)*k个座位 // 剩下座位去插m个不同的盒子==就等价n个相同的球放m个不同的盒子 // 然后组合数出来了 // 乘n的话是枚举座位,除m是去掉枚举第一个座位的时候,剩下人相邻的座位相对不变的情况 #include <iostream> #include <algorithm>…
排列组合 HDU - 1521 一句话区分指数型母函数和母函数就是 母函数是组合数,指数型母函数是排列数 #include<bits/stdc++.h> using namespace std; #define maxn 12 double ans[maxn],tp[maxn],inv[maxn]; int n,m,a[maxn]; void init() { inv[0]=1; for(int i=1; i<=11; i++) inv[i]=inv[i-1]*i; } int main…
题目链接 Problem Description Galen Marek, codenamed Starkiller, was a male Human apprentice of the Sith Lord Darth Vader. A powerful Force-user who lived during the era of the Galactic Empire, Marek originated from the Wookiee home planet of Kashyyyk as…
题意:有m个人有一张50元的纸币,n个人有一张100元的纸币.他们要在一个原始存金为0元的售票处买一张50元的票,问一共有几种方案数. 解法:(学习了他人的推导后~) 1.Catalan数的应用7的变形.(推荐阅读:http://www.cnblogs.com/chenhuan001/p/5157133.html).P.S.不知我之前自己推出的公式"C(n,m)*C(2*m,m)/(m+1)*P(n,n)*P(m,m)"是否是正确的. (1)在不考虑m人和n人本身组内的排列时,总方案数…
Machine scheduling Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1000    Accepted Submission(s): 363 Problem Description A Baidu's engineer needs to analyze and process large amount of data o…
Dressing Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2964 Accepted Submission(s): 1291 Problem Description Wangpeng has N clothes, M pants and K shoes so theoretically he can have N×M×K differ…
题目链接 Problem Description You are given a permutation a from 0 to n−1 and a permutation b from 0 to m−1. Define that the domain of function f is the set of integers from 0 to n−1, and the range of it is the set of integers from 0 to m−1. Please calcul…
循环多少次? Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 3051    Accepted Submission(s): 1117 Problem Description   我们知道,在编程中,我们时常须要考虑到时间复杂度,特别是对于循环的部分.比如, 假设代码中出现 for(i=1;i<=n;i++) OP ; 那么做了n次OP…
题意: t组输入,有n个人,刚开始谁也不认识谁.每一个人有一个权值w[i](1<=w[i]<=2),你要挑选3个互相不认识的人组成一个队,且要保证3个人权值之和大于等于5(也就意味着最少要有权值为2的人) 为你能找到多少个满足题意得队伍 然后给你n-1个关系,每个关系输入x y 这表示x和y认识了,而且如果z认识y,那么x也认识z.即关系具有传递性 然后在输出你还能找到多少个满足题意得队伍(这样循环n-1次) 题解: 因为关系有传递性,所以如果x和y认识,我们可以让x所在这个集合和y所在这个集…
排列组合的概念 排列:从n个不同元素中取出m(m≤n)个元素,按照一定的顺序排成一列,叫做从n个元素中取出m个元素的一个排列(Arrangement). 组合:从m个不同的元素中,任取n(n≤m)个元素为一组,叫作从m个不同元素中取出n个元素的一个组合. 排列组合实现代码 上一个项目做的一个水路的路径规划时,用到了排列的数据结构.求任意N个点里M个点的不同顺序的组合个数. 这样求最优路径.下面贴一段不知道哪里找的排列组合的算法. public class PermutationAndCombin…
题目链接: https://vjudge.net/contest/237052#problem/H 这里给你一串数字,让你计算同时拥有这串数字最大值和最小值的子集(连续)和子序列(可以不连续)的数量,计算子串的数量是为了避免重复,我们可以从前往后扫描,前面的子集不能包括后面的,后面的可以包括前面的,我们每次记录最小值和最大值的位置t1,t2,起初把t1,t2设为0,每当遇到最大值或最小值是就把t1或t2的值变成最小值或最大值的下标,然后sum=sum+min(t1,t2),我也是刚刚看别人博客才…
[题目]BZOJ 2111 [题意]求有多少1~n的排列,满足\(A_i>A_{\frac{i}{2}}\),输出对p取模的结果.\(n \leq 10^6,p \leq 10^9\),p是素数. [算法]计数DP+排列组合+lucas [题解]令i的父亲为i/2,转化为要求给一棵n个点的完全二叉树编号使得儿子编号>父亲编号. 设\(f[i]\)表示以第i个点为根的子树的编号方案数(1~sz[i]的排列),考虑从两个儿子处转移. 排列的本质是大小关系,所以两个排列组合起来相当于对1~sz[i&…
题目链接 题目描述 设r是个2^k 进制数,并满足以下条件: (1)r至少是个2位的2^k 进制数. (2)作为2^k 进制数,除最后一位外,r的每一位严格小于它右边相邻的那一位. (3)将r转换为2进制数q后,则q的总位数不超过w. 在这里,正整数k(1≤k≤9)和w(k〈w≤30000)是事先给定的. 问:满足上述条件的不同的r共有多少个? 我们再从另一角度作些解释:设S是长度为w 的01字符串(即字符串S由w个"0"或"1"组成),S对应于上述条件(3)中的q…
题目链接:https://leetcode.com/problems/combinations/#/description    Problem:给两个正数分别为n和k,求出从1,2.......n这n个数字选择k个数字作为一个组合,求出所有的组合.   数学问题:排列组合问题,可以得到这样的组合个数为:C(n,k)     代码实现:递归程序实现. 从1开始遍历到n为止,中间使用tempList保存每一个组合,只有当这个tempList的长度等于k时,将这个tempList添加到ans中.  …
[容斥原理] 对于统计指定排列方案数的问题,一个方案是空间中的一个元素. 定义集合x是满足排列中第x个数的限定条件的方案集合,设排列长度为S,则一共S个集合. 容斥原理的本质是考虑[集合交 或 集合交的补集]和[集合并 或 集合并的补集]之间相互转化的问题. 定义目标函数为f(m),已知函数g(T).(例如已知集合并,则T表示所有T个集合的集合并,通常g(T)=C(n,T)*T个集合的集合并) 当两者都不是补集或两者都是补集时,有f(S)=Σ(-1)|T|-1g(T),其中T为S的非空子集,即奇…
[题目]F - Many Easy Problems [题意]给定n个点的树,定义S为大小为k的点集,则f(S)为最小的包含点集S的连通块大小,求k=1~n时的所有点集f(S)的和取模924844033.n<=2*10^5. [算法]排列组合+NTT [题解]考虑每个点只会在k个点都在其一个子树时无贡献,即: $$ANS_k=\sum_{x=1}^{n}\binom{n}{k}-\sum_{y}\binom{sz[y]}{k}+\binom{n-sz[y]}{k}$$ 令$cnt_i$表示满足s…
[题目]H. Ember and Storm's Tree Game [题意]Zsnuoの博客 [算法]动态规划+排列组合 [题解]题目本身其实并不难,但是大量干扰因素让题目显得很神秘. 参考:Zsnuoの博客 一.首先Ember必胜(考虑n个点连成一条链),故合法的树一定满足先手必胜.当Storm选择的链满足单调或单峰时,每一条链对答案贡献两对(i,op). 解释:单调时,考虑翻转最后一个数和从第二个数开始取负两种操作.单峰时,上凸考虑翻转顶峰和顶峰右侧的数,下凸考虑取负顶峰和顶峰右侧的数.…