题目链接:Codeforces 451E Devu and Flowers 题目大意:有n个花坛.要选s支花,每一个花坛有f[i]支花.同一个花坛的花颜色同样,不同花坛的花颜色不同,问说能够有多少种组合. 解题思路:2n的状态,枚举说那些花坛的花取超过了,剩下的用C(n−1sum+n−1)隔板法计算个数.注意奇数的位置要用减的.偶数的位置用加的.容斥原理. #include <cstdio> #include <cstring> #include <cmath> #in…
题目链接 给n个盒子, 每个盒子里面有f[i]个小球, 然后一共可以取sum个小球.问有多少种取法, 同一个盒子里的小球相同, 不同盒子的不同. 首先我们知道, n个盒子放sum个小球的方式一共有C(sum+n-1, n-1)种, 但是这个题, 因为每个盒子里的小球有上限, 所有用刚才那种方法不行. 但是我们可以枚举. n只有20, 一共(1<<20)-1种状态, 每种状态, 1代表取这个盒子里的小球超过了上限, 0代表没有. 一共取sum个, 如果一个盒子里面的小球超过了上限, 那么就还剩下…
题意:每个箱子里有\( f[i] \)种颜色相同的花,现在要取出\( s \)朵花,问一共有多少种颜色组合 首先枚举\( 2^n \)种不满足条件的情况,对于一个不被满足的盒子,我们至少拿出\( f[i]+1 \)朵花. 然后进行容斥,不满足奇数个条件的减去,不满足偶数个条件的加上 #include<iostream> #include<cstdio> using namespace std; const int N=25,mod=1e9+7; int n; long long s…
题意:有N个盒子,每个盒子里有fi 朵花,求从这N个盒子中取s朵花的方案数.两种方法不同当且仅当两种方案里至少有一个盒子取出的花的数目不同. 分析:对 有k个盒子取出的数目超过了其中的花朵数,那么此时的方案数根据放球模型是C(N+t-1,N-1),其中t是s-(k个盒子超过其数目的最小数量).显然t<0该方案不存在. 而k个盒子超过其数目的最小数量 是 对应盒子数+1的和. 因为t的值可能很大,所以需要用Lucas定理计算组合数. #include<bits/stdc++.h> usin…
题目地址 在WFU(不是大学简称)第二次比赛中做到了这道题.高中阶段参加过数竞的同学手算这样的题简直不能更轻松,只是套一个容斥原理公式就可以.而其实这个过程放到编程语言中来实现也没有那么的复杂,不过为了让计算机在限定的时间内完成计算需要进行一些对计算上的优化.模MOD的情况下计算组合数nCr只需要求出分子再乘以分母的逆元,考虑到模的是1e9+7本身就是一个质数,根据费马小定理a^(MOD-2)即是a在模MOD意义下的逆元.求逆元的时候为了节约计算时间可以采用快速幂.计算过程就是容斥原理,就没有什…
题意:有n个瓶子每个瓶子有 f[i] 支相同的颜色的花(不同瓶子颜色不同,相同瓶子花视为相同) 问要取出s支花有多少种不同方案. 思路: 如果每个瓶子的花有无穷多.那么这个问题可以转化为  s支花分到n个瓶子有多少种方案  用隔板法就能解决 C(s+n-1,n-1) .有限制之后我们可以 用 没限制的去减掉那些违反限制的 如果只有一个瓶子取得花超出上限 那么减去,两个瓶子 要加上(容斥原理) n只有20  就能暴力枚举那些取超过上限f[i]的瓶子并且在这些瓶子至少选出 f[i]+1 支花  统计…
1272: [BeiJingWc2008]Gate Of Babylon Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 254  Solved: 120 Description Input Output Sample Input Sample Output 12 HINT Source [分析] T很小,跟以前的某一题很像啊,就是容斥. 枚举不符合的(超过限制的),2^t,然后就是算 n种无限多的东东中选m个. 经典的组合数题,$C_{n+m-1…
这题又是容斥原理,最近各种做容斥原理啊.当然,好像题解给的不是容斥原理的方法,而是用到Lucas定理好像.这里只讲容斥的做法. 题意:从n个容器中总共取s朵花出来,问有多少种情况.其中告诉你每个盒子中有多少朵花. 分析:其实就是求方程: x1+x2+...+xn = s 的整数解的个数,方程满足: 0<=x1<=a[1], 0<=x2<=a[2]... 设:A1 = {x1 >= a[1]+1} , A2 = {x2 >= a[2]+1} , .... , An = {…
可重集的排列数 + 容斥原理 对于 \(\{A_1 * C_1, A _2 * C_2, \cdots, A_n * C_n\}\)这样的集合来说, 设 \(N = \sum_{i = 1} ^ n A_i\), 要在这个集合中取出 \(M\) 个元素来,这样的方案数是: \[ C _ {N+M-1}^{N-1} - \sum _ {i =1} ^ n {C_{N+M-A_i - 2}^{N-1}} + \sum _ {1\leq i < j \leq n} ^ n {C_{N+M - A_i…
Codeforces Round #258 (Div. 2) Devu and Flowers E. Devu and Flowers time limit per test 4 seconds memory limit per test 256 megabytes input standard input output standard output Devu wants to decorate his garden with flowers. He has purchased n boxes…
E. Devu and Flowers 题目连接: http://codeforces.com/contest/451/problem/E Description Devu wants to decorate his garden with flowers. He has purchased n boxes, where the i-th box contains fi flowers. All flowers in a single box are of the same color (hen…
E. Devu and Flowers time limit per test 4 seconds memory limit per test 256 megabytes input standard input output standard output Devu wants to decorate his garden with flowers. He has purchased n boxes, where the i-th box contains fi flowers. All fl…
CF451E Devu and Flowers(容斥) 题目大意 \(n\)种花每种\(f_i\)个,求选出\(s\)朵花的方案.不一定每种花都要选到. \(n\le 20\) 解法 利用可重组合的公式. 不考虑\(f_i\)的限制,直接可重组合的方案是,意思是从可以重复的\(n\)个元素中取出\(r\)个的个数.注意,根据定义,此时\(r\)种每个都要选. \[ f(s,r)={s+r-1 \choose r-1} \] 考虑限制怎么办,我们先容斥. 我们可以钦定某些花选择了\(f_i+1\)…
Zap FGD正在破解一段密码,他需要回答很多类似的问题:对于给定的整数a,b和d,有多少正整数对x,y,满足x<=a,y<=b,并且gcd(x,y)=d.作为FGD的同学,FGD希望得到你的帮助. Input 第一行包含一个正整数n,表示一共有n组询问.(1<=n<= 50000)接下来n行,每行表示一个询问,每行三个 正整数,分别为a,b,d.(1<=d<=a,b<=50000) Output 对于每组询问,输出到输出文件zap.out一个正整数,表示满足条件…
题目链接:Codeforces 439C Devu and Partitioning of the Array 题目大意:给出n个数,要分成k份,每份有若干个数,可是仅仅须要关注该份的和为奇数还是偶数,要求偶数堆的个数为p. 输出方案. 解题思路:首先先将数组依照奇偶排序.也能够分开储存. 然后先单独分k-p个奇数,然后后面的就将两个奇数当一个偶数分配.分配过程中计算是否满足,比方说奇数是否成对,以及是否分成了k堆. #include <cstdio> #include <cstring…
[BZOJ4403]序列统计(组合数学,卢卡斯定理) 题面 Description 给定三个正整数N.L和R,统计长度在1到N之间,元素大小都在L到R之间的单调不降序列的数量.输出答案对10^6+3取模的结果. Input 输入第一行包含一个整数T,表示数据组数. 第2到第T+1行每行包含三个整数N.L和R,N.L和R的意义如题所述. 1≤N,L,R≤10^9,1≤T≤100,输入数据保证L≤R. Output 输出包含T行,每行有一个数字,表示你所求出的答案对10^6+3取模的结果. Samp…
题目描述 给定\(n,m,p(1≤n,m,p≤10^5)\) 求 \(C_{n+m}^m mod p\) 保证\(P\)为\(prime\) \(C\)表示组合数. 一个测试点内包含多组数据. 输入输出格式 输入格式: 第一行一个整数\(T(T≤10)\),表示数据组数 第二行开始共\(T\)行,每行三个数\(n m p\),意义如上 输出格式: 共\(T\)行,每行一个整数表示答案. 输入输出样例 输入样例#1: 2 1 2 5 2 1 5 输出样例#1: 3 3 题解 卢卡斯定理模板题 卢卡…
[数论]卢卡斯定理模板 洛谷P3807 >>>>题目 [题目] https://www.luogu.org/problemnew/show/P3807 [输入格式] 第一行一个整数T(T\le 10T≤10),表示数据组数 第二行开始共T行,每行三个数n m p,意义如上 [输出格式] 共T行,每行一个整数表示答案. [输入样例] 21 2 52 1 5 [输出样例] 33 >>>>分析 emmmm模板题还是不用分析了吧 卢卡斯定理解决的就是组合数C(n,m…
题目描述 在一个\(k\)维空间中,每个整点被黑白染色.对于一个坐标为\((x_1,x_2,\ldots,x_k)\)的点,他的颜色我们通过如下方式计算: 如果存在一维坐标是\(0\),则颜色是黑色. 如果这个点是\((1,1,\ldots,1)\)(每一维都是\(1\)),这个点的颜色是白色 如果这个点的\(k\)个前驱(任取一维坐标减\(1\))中的白点有奇数个,那么这个点的颜色就是白色,否则就是黑色 给出一个\(k\)维超矩形,求这个矩形内的白点个数. \(k\leq 9,1\leq l_…
题目描述 给你一个长度为\(n\)的数列\(a\),求有多少个长度\(\geq 2\)的不上升子序列\(a_{b_1},a_{b_2},\ldots,a_{b_k}\)满足 \[ \prod_{i=2}^k\binom{a_{b_{i-1}}}{a_{b_i}}\mod 2>0 \] 答案对\({10}^9+7\)取模. \(n\leq211985,a_i\leq 233333\) \(\forall i\neq j,a_i\neq a_j\) 题解 水题. 先忽略长度\(\geq 2\)这个条…
卢卡斯定理 求\(C_m^n~mod~p\) 设\(m={a_0}^{p_0}+{a_1}^{p_1}+\cdots+{a_k}^{p_k},n={b_0}^{p_0}+{b_1}^{p_1}+\cdots+{b_k}^{p_k}\) 则\(C_m^n\equiv\prod{C_{a_i}^{b_i}}(mod~p)\) 扩展卢卡斯定理 好像这也不是什么定理,只是一个计算方法 计算\(C_m^n~mod~p\),其中\(p={p_1}^{q_1}\times{p_2}^{q_2}\times\c…
哇,这道题真的好好,让我这个菜鸡充分体会到卢卡斯和欧拉函数的强大! 先把题意抽象出来!就是计算这个东西. p=999911659是素数,p-1=2*3*4679*35617 所以:这样只要求出然后再快速乘法就行了. 那好,怎么做呢? 有模运算的性质得到  然后就是卢卡斯原理. 先把卢卡斯原理放这里: void init(int mod){ //对mod取余后,一定小于mod,因此把mod的阶乘存起来就够用 f[] = ; ; i <= mod; i++){ f[i] = f[i - ] * i…
洛谷题目传送门 蒟蒻惊叹于一道小小的数论题竟能涉及这么多知识点!不过,掌握了这些知识点,拿下这道题也并非难事. 题意一行就能写下来: 给定\(N,G\),求\(G^{\sum \limits _{d|N}C(N,d)}(\mod999911659)\) 乍一看,指数这么大,要怎么处理好呢?上费马小定理. 平时用费马小定理求逆元用多了,\(a^{p-2}\equiv inv(a)(\mod p)\),搞得蒟蒻差点忘了它原本的样子\(a^{p-1}=1(\mod p)\),那原式的指数\(\sum…
[UOJ#275]组合数问题(卢卡斯定理,动态规划) 题面 UOJ 题解 数据范围很大,并且涉及的是求值,没法用矩阵乘法考虑. 发现\(k\)的限制是,\(k\)是一个质数,那么在大组合数模小质数的情况下可以考虑使用卢卡斯定理. 卢卡斯定理写出来是\(Lucas(n,m)=Lucas(n/K,m/K)*Lucas(n\%K,m\%K)\) 显然只要有任何一个\(Lucas(n\%K,m\%K)=C_{n\%K}^{m\%K}\)是\(K\)的倍数那么当前数就会是\(K\)的倍数.因为\(K\)是…
[BZOJ4903][UOJ#300]吉夫特(卢卡斯定理,动态规划) 题面 UOJ BZOJ:给的UOJ的链接...... 题解 首先模的质数更小了,直接给定了\(2\).当然是卢卡斯定理了啊. 考虑一个组合数在什么情况下会是一个奇数.\(Lucas(n,m)\equiv Lucas(n/2,m/2)*Lucas(n\%2,m\%2)\).后面这个东西一共只有\(4\)种取值,我们大力讨论一下:\(C_{0}^0=1,C_{0}^1=0,C_1^0=1,C_1^1=1\).既然是一个奇数,证明\…
[BZOJ4591][SHOI2015]超能粒子炮·改 (卢卡斯定理) 题面 BZOJ 洛谷 题解 感天动地!终于不是拓展卢卡斯了!我看到了一个模数,它是质数!!! 看着这个东西就感觉可以递归处理. 令\(f(n,k)\)表示答案. \[\begin{aligned} f(n,k)&=\sum_{i=0}^k {n\choose i}\\ &=\sum_{i=0}^k {n/p\choose i/p}*{n\%p\choose i\%p}\\ &=\sum_{x=0}^{p-1}{…
[BZOJ4830][HNOI2017]抛硬币(组合计数,拓展卢卡斯定理) 题面 BZOJ 洛谷 题解 暴力是啥? 枚举\(A\)的次数和\(B\)的次数,然后直接组合数算就好了:\(\displaystyle \sum_{i=0}^a{a\choose i}\sum_{j=0}^{i-1}{b\choose j}\). 完美\(TLE\). 先考虑特殊点的情况,如果\(a=b\),那么显然两者输赢的情况反过来是一一对应的,所以答案就是总情况减去平局的情况除二,而总方法就是\(\displays…
[BZOJ3129][SDOI2013]方程(容斥,拓展卢卡斯定理) 题面 BZOJ 洛谷 题解 因为答案是正整数,所先给每个位置都放一个就行了,然后\(A\)都要减一. 大于的限制和没有的区别不大,提前给他\(A_i\)个就好了. 假如没有小于的限制的话,那么就是经典的隔板法直接算答案. 如果提前给完之后,还剩\(M\)个球,要放进\(n\)个盒子,答案就是\(\displaystyle{M+n-1\choose n-1}\) 然而有一个小于的限制很烦人.发现数量很少,那么直接爆枚子集,强制一…
[BZOJ2142]礼物(拓展卢卡斯定理) 题面 BZOJ 洛谷 题解 显然如果\(\sum w_i>n\)无解. 否则答案就是:\(\displaystyle \prod_{i=1}^m{n-\sum_{j=0}^{i-1}w_j\choose w_i}\). 因为并没有保证\(P\)是质数,所以需要用到拓展卢卡斯. #include<iostream> #include<cstdio> using namespace std; #define ll long long l…
证明摘自:(我网上唯一看得懂的证明) https://blog.csdn.net/alan_cty/article/details/54318369 结论:(显然递归实现)lucas(n,m)=lucas(n/p,m/p)*C(n%p,m%p) 将n,m很大的数压成求两个小于p的组合数的乘积 数学上的卢卡斯定理两种形式:(n,m用p进制表示) 上代码: //打表 void init(ll x){ rec[]=; For(i,,x)mulmod(rec[i],rec[]*i); } //逆元 ll…