2019西北工业大学程序设计创新实践基地春季选拔赛 D(卢卡斯定理)
链接:https://ac.nowcoder.com/acm/contest/553/D
来源:牛客网
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
题目描述
Chino的数学很差,因此Cocoa非常担心。今天,Cocoa要教Chino解不定方程。
众所周知,不定方程的解有0个或者若干个。
给出方程:
Cocoa想知道这个不定方程的正整数解和非负整数解各有几个。
题目对Chino来说太难啦,你能帮一帮Chino吗?
输入描述:
两个正整数m, n
输出描述:
题目要求的答案,即正整数解的个数和非负整数解的个数 。由于答案可能会很大,你只需要输出答案 mod(10 9+ 7) 即可。
输出
20 120 解题思路:
组合数:
1.n,m比较小时:C(n,m)=C(n-1,m)+C(n-1,m-1);
2.卢卡斯定理:n,m比较大时:C(n,m)%mod=C(n%mod,m%mod)*C(n/mod,m/mod)%mod; 第一种情况:将n拆分成m个正整数的和,可以认为将n个小球放入m个盒子,每个盒子都不可为空,可以直接用隔板法,n个小球有n-1的空隙,我们只要在n-1个空隙中选择m-1个空隙放入隔板即可,答案为C(n-1,m-1)
第二种情况:将n拆分成m个非负整数的和,可以认为将n个小球放入m个盒子,但是有的盒子可以为空,不能直接使用隔板法,可以假设我们从外面拿了m个小球,以保证每个盒子至少有一个小球,然后继续又使用隔板法,n+m个小球有n+m-1个间隙,选择其中的m-1个空隙放入隔板就可以了,放完隔板后,每部分取走一个小球即为每个盒子球的个数,方案总数为C(n+m-1,m-1)
直接套用卢卡斯定理模板就可以了 代码:
#include <iostream>
#include <cstdio>
using namespace std;
#define ll long long
#define mod 1000000007
ll n,m,l,r;
ll qmul(ll a,ll b){
ll res=;
while(b){
if(b&) res=(res+a)%mod;
b>>=;
a=(a+a)%mod;
}
return res;
}
ll qpow(ll a,ll b){
ll res=;
while(b){
if(b&) res=qmul(res,a);
b>>=;
a=qmul(a,a);
}
return res;
}
void exgcd(ll a,ll b,ll &x,ll &y,ll &c){
if(!b){
x=,y=,c=a;
}else{
exgcd(b,a%b,y,x,c);
y-=a/b*x;
}
}
ll INV(ll a,ll p){
ll x,y,c;
exgcd(a,p,x,y,c);
return (x%p+p)%p;
}
ll C(int a,int b){
if(a<b) return ;
if(b==) return ;
if(b>a-b) b=a-b;
ll ca=,cb=;
for(int i=;i<b;i++){
ca=ca*(a-i)%mod;
cb=cb*(b-i)%mod;
}
return ca*qpow(cb,mod-)%mod; //用费马小定理求逆元
//return ca*INV(cb,mod)%mod; //用扩展欧几里得求逆元
}
ll lucas(int a,int b){
ll res=;
while(a&&b){
res=res*C(a%mod,b%mod)%mod;
a/=mod;
b/=mod;
}
return res;
}
int main(){
scanf("%lld%lld",&m,&n);
printf("%lld %lld\n",lucas(n-,m-),lucas(n+m-,m-));
return ;
}
2019西北工业大学程序设计创新实践基地春季选拔赛 D(卢卡斯定理)的更多相关文章
- 2019西北工业大学程序设计创新实践基地春季选拔赛 I Chino with Rewrite (并查集+树链剖分+线段树)
链接:https://ac.nowcoder.com/acm/contest/553/I 思路:离线整棵树,用并查集维护下联通的情况,因为值只有60个,用2的x(1<=x<=60)次方表示 ...
- 2019西北工业大学程序设计创新实践基地春季选拔赛(重现赛) Chino with Equation(组合公式)
链接:https://ac.nowcoder.com/acm/contest/553/D来源:牛客网 题目描述 Chino的数学很差,因此Cocoa非常担心.今天,Cocoa要教Chino解不定方程. ...
- 《程序设计语言——实践之路》【PDF】下载
程序设计语言--实践之路>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382240 内容简介 本书在美国大学已有使用了十余年,目前被欧 ...
- 《程序设计语言——实践之路(英文第三版)》【PDF】下载
<程序设计语言--实践之路(英文第三版)>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382234 内容简介 <程序设计语 ...
- 《程序设计语言——实践之路【PDF】下载
<程序设计语言--实践之路[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382240 内容简介 <程序设计语言--实践之路(第3版 ...
- 腾讯云“智能+互联网TechDay”:揭秘智慧出行核心技术与创新实践
现如今,地面交通出行与大家的生活息息相关.在当前城市道路日益复杂和拥挤的情况下,如何保证交通出行的安全和便捷相信是每个人以及众多专家.科研工作者重点关注的问题. “智慧交通”系统是解决交通发展瓶颈的有 ...
- 阿里聚安全受邀参加SFDC安全大会,分享互联网业务面临问题和安全创新实践
现今,技术引领的商业变革已无缝渗透入我们的日常生活,「技术改变生活」的开发者们被推向了创新浪潮的顶端.国内知名的开发者技术社区 SegmentFault 至今已有四年多了,自技术问答开始,他们已经发展 ...
- 2019年学Java开发有优势吗?
随着信息科技的发展,在我们的日程生活和工作中到处充斥和使用着互联网信息技术.事实说明,互联网已经越来越广泛地深入到人们生活的方方面面,Java技术服务市场需求空缺会越来越大.学会一门IT技术,将拥有更 ...
- [BFS,A*,k短路径] 2019中国大学生程序设计竞赛(CCPC) - 网络选拔赛 path (Problem - 6705)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=6705 path Time Limit: 2000/2000 MS (Java/Others) Mem ...
随机推荐
- matplotlib.pyplot 包
import matplotlib.pyplot as plt 图片的打开和保存: from PIL import Image img=Image.open('....') img.save('... ...
- jenkins解决python不是内部命令
1.在 Windows 提示符下运行是没有问题. 2.把Jenkins项目配置中 python main.py 修改成python可执行文件全路径:D:\Python35\python.exe m ...
- MySql不区分大小写。
解决方案: 1:给相关字段添加上让其区分大小写. alter table 表名 modify column 字段名 varchar(100) binary character set utf8
- MS4W安装教程
简介 欢迎使用MS4W,这是由Gateway Geomatics开发的快速简便的安装程序,用于为Windows及其附带应用程序(如Geomoose.MapBender.Openlayers等)设置Ma ...
- apache如何发布地图服务
svg jpg Tomcat和apache是什么关系呢?:https://www.cnblogs.com/zangdalei/p/8057325.html geoserver又是怎么来的呢? Tomc ...
- drawArc
1) 画笔设置 Paint.Style.STROKE 中空模式 paint = new Paint(); //新建一个画笔对象 paint.setAntiAlias(true);//抗锯齿功能 pai ...
- xpath定位不到原因浅析
在爬虫中,我们经常使用xpath来对元素进行定位,xpath定位分为两种,一种是绝对定位,/html/body/div[2]/div[1]/div/div[3]/a[7],另外一种是相对定位,比如r' ...
- mysql in与or效率比较
转自[点击]
- CentOS7和Ubuntu18.10下运行Qt Creator出现cannot find -lGL的问题的解决方案
解决方法:缺少相应的opengl的库,需要安装opengl库 一.Ubuntu下解决Qt5.11.1 cannot find -lGL 有两种原因: 一种是没有按照libGL库,那么就安装: sudo ...
- [Linux] 027 RPM 包与 源码包的区别
1. 区别 安装之前的区别: 概念上的区别 安装之后的区别: 安装位置不同 2. RPM 包安装位置 安装在默认位置中 RPM 包默认安装路径 明细 /ect 配置文件安装目录 /usr/bin/ 可 ...