传送门 貌似就是lucas的板子题啊. 练一练手感觉挺舒服的^_^ 代码: #include<bits/stdc++.h> #define mod 10007 #define ll long long using namespace std; int T_T; ll n,m,fac[mod+5],ifac[mod+5]; inline ll lucas(ll a,ll b){ if(a<b)return 0; if(a<mod&&b<mod)return fa…
2982: combination Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 664  Solved: 397[Submit][Status][Discuss] Description LMZ有n个不同的基友,他每天晚上要选m个进行[河蟹],而且要求每天晚上的选择都不一样.那么LMZ能够持续多少个这样的夜晚呢?当然,LMZ的一年有10007天,所以他想知道答案mod 10007的值.(1<=m<=n<=200,000,000) Inpu…
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2982 $C(N,M)\% P = C(N\% P,M\% P) * C(N/P,M/P)\% P$ #include<cstdio> #include<cstring> #include<algorithm> using namespace std; ; ],fac[]; int C(int x,int y){ ; return fac[x]*inv[fac[y…
[BZOJ2982]combination Description LMZ有n个不同的基友,他每天晚上要选m个进行[河蟹],而且要求每天晚上的选择都不一样.那么LMZ能够持续多少个这样的夜晚呢?当然,LMZ的一年有10007天,所以他想知道答案mod 10007的值.(1<=m<=n<=200,000,000) Input   第一行一个整数t,表示有t组数据.(t<=200)   接下来t行每行两个整数n, m,如题意. Output T行,每行一个数,为C(n, m) mod…
How Many Sets II Time Limit: 2 Seconds      Memory Limit: 65536 KB Given a set S = {1, 2, ..., n}, number m and p, your job is to count how many set T satisfies the following condition: T is a subset of S |T| = m T does not contain continuous numbers…
2982: combination Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 734  Solved: 437[Submit][Status][Discuss] Description LMZ有n个不同的基友,他每天晚上要选m个进行[河蟹],而且要求每天晚上的选择都不一样.那么LMZ能够持续多少个这样的夜晚呢?当然,LMZ的一年有10007天,所以他想知道答案mod 10007的值.(1<=m<=n<=200,000,000) Inpu…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2982 卢卡斯定理裸题: 原准备1A来着,结果输出忘了加回车! 预处理阶乘或者现求都可以,感觉学到了一种现求 C 的写法呢. 代码如下: #include<iostream> #include<cstdio> #include<cstring> using namespace std; typedef long long ll; ; ll fac[]; void i…
Description LMZ有n个不同的基友,他每天晚上要选m个进行[河蟹],而且要求每天晚上的选择都不一样.那么LMZ能够持续多少个这样的夜晚呢?当然,LMZ的一年有10007天,所以他想知道答案mod 10007的值.(1<=m<=n<=200,000,000) Input   第一行一个整数t,表示有t组数据.(t<=200)   接下来t行每行两个整数n, m,如题意. Output T行,每行一个数,为C(n, m) mod 10007的答案. Sample Input…
题目大意:发上来就过不了审核了--总之大意就是求C(n,m) mod 10007 m,n∈[1,2*10^8] 卢卡斯定理:C(n,m)=C(n%p,m%p)*C(n/p,m/p) mod p 要求p是质数 当中n%p可能会小于m%p 这样的情况下直接返回0就可以 证明去问卢卡斯 我不知道 #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define p 1…
传送门 简单dp题. f[i]表示以i为根的子树被割掉的最小值. 那么有: f[i]=min(∑vf[v],dist(i,fa))" role="presentation" style="position: relative;">f[i]=min(∑vf[v],dist(i,fa))f[i]=min(∑vf[v],dist(i,fa)) 直接树形dp就行了. 代码: #include<bits/stdc++.h> #define N 10…
传送门 简单主席树啊. 但听说有随机算法可以秒掉%%%(本蒟蒻并不会) 直接维护值域内所有数的出现次数之和. 当这个值不大于区间总长度的一半时显然不存在合法的数. 这样在主席树上二分查值就行了. 代码: #include<bits/stdc++.h> #define N 500005 using namespace std; inline int read(){ int ans=0; char ch=getchar(); while(!isdigit(ch))ch=getchar(); whi…
传送门 根据国家集训队2014论文集中胡泽聪的随机化算法可以通过这道题. 对于每个数,它有12" role="presentation" style="position: relative;">1212的概率在最后的答案序列中,这样我们每次随机出序列中的一个数,然后看它的因子有没有符合条件的更新答案就行了. 代码: #include<bits/stdc++.h> #define ll long long #define N 1000005…
传送门 由于存在不超过7条直线可以覆盖超过所有的点. 所以如果我们随机选点的话(每次随机两个) 那么得到的解恰好为最优解的概率是149" role="presentation" style="position: relative;">149149 这样多随机几次就能得到最优解了^_^ 注意到有只有一个点的情况mmp 代码: #include<bits/stdc++.h> #define N 10005 using namespace st…
(上不了p站我要死了,侵权度娘背锅) Description LMZ有n个不同的基友,他每天晚上要选m个进行[河蟹],而且要求每天晚上的选择都不一样.那么LMZ能够持续多少个这样的夜晚呢?当然,LMZ的一年有10007天,所以他想知道答案mod 10007的值.(1<=m<=n<=200,000,000) Input 第一行一个整数t,表示有t组数据.(t<=200) 接下来t行每行两个整数n, m,如题意. Output T行,每行一个数,为C(n, m) mod 10007的答…
http://www.lydsy.com/JudgeOnline/problem.php?id=2982 少加了特判n<m return 0就wa了QAQ lucas定理:C(n, m)%p=(C(n%p, m%p)*C(n/p, m/p))%p 等英语好一点去wiki看一下证明吧QAQhttp://en.wikipedia.org/wiki/Lucas%27_theorem 然后这是网上搜到的关于lucas的一些内容 首先给出这个Lucas定理: A.B是非负整数,p是质数.AB写成p进制:A…
可以先做这个题[SDOI2010]古代猪文 此算法和LUCAS定理没有半毛钱关系. [模板]扩展卢卡斯 不保证P是质数. $C_n^m=\frac{n!}{m!(n-m)!}$ 麻烦的是分母. 如果互质就有逆元了. 所以可以考虑把分子分母不互质的数单独提出来处理. 然鹅P太一般,直接处理要考虑的东西太多. 我们不妨令$p=p_1^{q_1}*p_2^{q_2}*...*p_k^{q_k}$ 对每一个$p_i^{q_i}$分别求解(不妨叫这个数为$pk$)(这样会容易很多) 即求ai满足:$\fr…
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…
借(cao)鉴(xi)自popoqqq大爷的lucas定理的写法 #include<cstdio> #include<cstring> #include<cctype> #include<algorithm> using namespace std; #define rep(i,s,t) for(int i=s;i<=t;i++) #define dwn(i,s,t) for(int i=s;i>=t;i--) #define clr(x,c)…
(1)Lucas定理:p为素数,则有: (2)证明: n=(ak...a2,a1,a0)p = (ak...a2,a1)p*p + a0 =  [n/p]*p+a0,m=[m/p]*p+b0其次,我们知道,对任意质数p有(1+x)^p=1+(x^p)(mod p) .我们只要证明这个式子:C(n,m)=C([n/p],[m/p]) * C(a0,b0)(mod p),那么就可以用归纳法证明整个定理.对于模p而言,我们有下面的式子成立: 上式左右两边的x的某项x^m(m<=n)的系数对模p同余.其…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5226 题意:给一个矩阵a,a[i][j] = C(i,j)(i>=j) or 0(i < j),求(x1,y1),(x2,y2)这个子矩阵里面的所有数的和. 思路:首先可以推导出一个公式C(n,i)+C(n + 1,i)+...+C(m,i) = C(m + 1,i + 1) 知道了这个公式,就可以将子矩阵里每行(或每列)的和值表示成组合数的差值,现在的关键是求出C(n,m)(mod p). 由于…
(1)Lucas定理:p为素数,则有: (2)证明: n=(ak...a2,a1,a0)p = (ak...a2,a1)p*p + a0 =  [n/p]*p+a0,m=[m/p]*p+b0其次,我们知道,对任意质数p有(1+x)^p=1+(x^p)(mod p) .我们只要证明这个式子:C(n,m)=C([n/p],[m/p]) * C(a0,b0)(mod p),那么就可以用归纳法证明整个定理.对于模p而言,我们有下面的式子成立: 上式左右两边的x的某项x^m(m<=n)的系数对模p同余.其…
Lucas定理 [原文]2017-02-14 [update]2017-03-28 Lucas定理 计算组合数取模,适用于n很大p较小的时候,可以将计算简化到小于p $ \binom{n}{m} \mod p , p  is  prime$ $ n= n_k * p ^ k + n_{k-1} * p^{k-1}+ ... + n_2 * p^2 + n_1 * p + n_0 $ $ m=m_k * p ^ k +m_{k-1} * p^{k-1}+ ... +m_2 * p^2 +m_1 *…
(1)Lucas定理:p为素数,则有: (2)证明: n=(ak...a2,a1,a0)p = (ak...a2,a1)p*p + a0 =  [n/p]*p+a0,m=[m/p]*p+b0其次,我们知道,对任意质数p有(1+x)^p=1+(x^p)(mod p) .我们只要证明这个式子:C(n,m)=C([n/p],[m/p]) * C(a0,b0)(mod p),那么就可以用归纳法证明整个定理.对于模p而言,我们有下面的式子成立: 上式左右两边的x的某项x^m(m<=n)的系数对模p同余.其…
Lucas定理 在『组合数学基础』中,我们已经提出了\(Lucas\)定理,并给出了\(Lucas\)定理的证明,本文仅将简单回顾,并给出代码. \(Lucas\)定理:当\(p\)为质数时,\(C_n^m\equiv C_{n\ mod\ p}^{m\ mod\ p}*C_{n/p}^{m/p}(mod\ p)\). 在计算模域组合数时,如果模数较小,那么就可以尝试使用\(Lucas\)定理来递归求解,其时间复杂度为\(O(plog_p\min(n,m))\). \(Code:\) inlin…
从这里开始 一个有趣的问题 扩展Lucas算法 一个有趣的问题 题目大意 给定$n, m, p$,求$C_{n}^{m}$除以$p$后的余数. Subtask#1  $0\leqslant m\leqslant n \leqslant 2\times 10^{3}$ 直接杨辉恒等式$C_{n}^{m} = C_{n - 1}^{m - 1} + C_{n - 1}^{m}$递推. 时间复杂度$O(n^{2})$. Subtask#2  $0\leqslant m\leqslant n \leqs…
额,前两天刚讲了数据结构,今天我来讲讲组合数学中的一种奇妙优化——Lucas 先看这样一个东西 没学过lucas的肯定会说:还不简单?处理逆元,边乘边膜呗 是,可以,但注意一下数据范围 你算这一次,你需要跑25000下 那么你如果求C199999 1~C199999 52222 呢? 你会发现你的复杂度上天了 所以我们会用到一个神奇的定理:Lucas定理 定理内容如下: Lucas(n,m,p)=c(n%p,m%p)*Lucas(n/p,m/p,p) 不好玩,是吗? 那么我来证明一下 由二项式定…
利用Lucas定理解决大组合数取模 Lucas定理是用来求 C(n,m) mod p,p为素数的值.(注意:p一定是素数) Lucas定理用来解决大组合数求模是很有用的 Lucas定理最大的数据处理能力是p在10^5左右 表达式:C(n,m)%p=C(n/p,m/p)*C(n%p,m%p)%p 递归方程:(C(n%p, m%p)*Lucas(n/p, m/p))%p.(递归出口为m==0,return 1) 然后来一道裸题 BZOJ2982 #include<cstdio> using nam…
(上不了p站我要死了,侵权度娘背锅) Description 一年一度的圣诞节快要来到了.每年的圣诞节小E都会收到许多礼物,当然他也会送出许多礼物.不同的人物在小E 心目中的重要性不同,在小E心中分量越重的人,收到的礼物会越多.小E从商店中购买了n件礼物,打算送给m个人 ,其中送给第i个人礼物数量为wi.请你帮忙计算出送礼物的方案数(两个方案被认为是不同的,当且仅当存在某 个人在这两种方案中收到的礼物不同).由于方案数可能会很大,你只需要输出模P后的结果. Input 输入的第一行包含一个正整数…
题意:n件礼物,送给m个人,每人的礼物数确定,求方案数. 解题关键:由于模数不是质数,所以由唯一分解定理, $\bmod  = p_1^{{k_1}}p_2^{{k_2}}......p_s^{{k_s}}$ 然后,分别求出每个组合数模每个$p_i^{{k_i}}$的值,这里可以用扩展lucas定理求解,(以下其实就是扩展lucas定理的简略证明) 关于$C_n^m\% {p^k}$, $C_n^m = \frac{{n!}}{{m!(n - m)!}}$, 我们以$n=19,p=3,k=2$为…
1.Lucas定理 首先给出式子:\(C_n^m\%p = C_{\lfloor\frac{n}{p}\rfloor}^{\lfloor\frac{m}{p}\rfloor} * C_{n\%p}^{m\%p}\% p\),其中p为质数. 这里给出证明--证明是我在luogu上看到的lance1ot大佬的证明,个人认为是写的很好的,在此还要做一下补充. 首先,对于质数p,可以保证\(C_p^i(1 <= i <= p-1) \equiv 0(mod\ p)\),这个比较显然,因为组合数一定是整…