链接:https://ac.nowcoder.com/acm/contest/553/D
来源:牛客网

Chino with Equation
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

题目描述

Chino的数学很差,因此Cocoa非常担心。今天,Cocoa要教Chino解不定方程。
众所周知,不定方程的解有0个或者若干个。
给出方程:

Cocoa想知道这个不定方程的正整数解和非负整数解各有几个。
题目对Chino来说太难啦,你能帮一帮Chino吗?

输入描述:

两个正整数m, n

输出描述:

题目要求的答案,即正整数解的个数和非负整数解的个数 。由于答案可能会很大,你只需要输出答案 mod(10 9+ 7) 即可。
 
示例1

输入

复制

4 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(卢卡斯定理)的更多相关文章

  1. 2019西北工业大学程序设计创新实践基地春季选拔赛 I Chino with Rewrite (并查集+树链剖分+线段树)

    链接:https://ac.nowcoder.com/acm/contest/553/I 思路:离线整棵树,用并查集维护下联通的情况,因为值只有60个,用2的x(1<=x<=60)次方表示 ...

  2. 2019西北工业大学程序设计创新实践基地春季选拔赛(重现赛) Chino with Equation(组合公式)

    链接:https://ac.nowcoder.com/acm/contest/553/D来源:牛客网 题目描述 Chino的数学很差,因此Cocoa非常担心.今天,Cocoa要教Chino解不定方程. ...

  3. 《程序设计语言——实践之路》【PDF】下载

    程序设计语言--实践之路>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382240 内容简介 本书在美国大学已有使用了十余年,目前被欧 ...

  4. 《程序设计语言——实践之路(英文第三版)》【PDF】下载

    <程序设计语言--实践之路(英文第三版)>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382234 内容简介 <程序设计语 ...

  5. 《程序设计语言——实践之路【PDF】下载

    <程序设计语言--实践之路[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382240 内容简介 <程序设计语言--实践之路(第3版 ...

  6. 腾讯云“智能+互联网TechDay”:揭秘智慧出行核心技术与创新实践

    现如今,地面交通出行与大家的生活息息相关.在当前城市道路日益复杂和拥挤的情况下,如何保证交通出行的安全和便捷相信是每个人以及众多专家.科研工作者重点关注的问题. “智慧交通”系统是解决交通发展瓶颈的有 ...

  7. 阿里聚安全受邀参加SFDC安全大会,分享互联网业务面临问题和安全创新实践

    现今,技术引领的商业变革已无缝渗透入我们的日常生活,「技术改变生活」的开发者们被推向了创新浪潮的顶端.国内知名的开发者技术社区 SegmentFault 至今已有四年多了,自技术问答开始,他们已经发展 ...

  8. 2019年学Java开发有优势吗?

    随着信息科技的发展,在我们的日程生活和工作中到处充斥和使用着互联网信息技术.事实说明,互联网已经越来越广泛地深入到人们生活的方方面面,Java技术服务市场需求空缺会越来越大.学会一门IT技术,将拥有更 ...

  9. [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 ...

随机推荐

  1. Task3.特征选择

    参考:https://www.jianshu.com/p/f3b92124cd2b 互信息 衡量两个随机变量之间的相关性,两个随机变量相关信息的多少. 随机变量就是随机试验结果的量的表示,可以理解为按 ...

  2. grunt教程

    https://blog.csdn.net/sinat_38992528/article/details/79400595

  3. C# 与 C++,语法差别有多小-第三章 C++数据类型 第一部分

    一,数据类型 C++: char  int short  long float double, unsigned long double(128位,19位有效数字), wchar_t, 浮点型文字常量 ...

  4. linux nginx管理

    1.添加 Nginx 服务 vim /lib/systemd/system/nginx.service 添加如下内容: [Unit]Description=nginxAfter=network.tar ...

  5. Win7 64位系统 注册 ocx控件

    32位系统注册ocx就不谈了.网上一搜一大把.下面说下win7 64位 旗舰版下如果注册ocx控件    1.首先复制 XXXX.OCX文件到“C:\Windows\SysWOW64”目录. (XXX ...

  6. JavaScript中的十种操作符

    ①   一元操作符(参与的只有一个变量) 前置递增递减(语句解析到递增/递减时值就被改变了) 后置递增递减(整个语句执行后值再改变) 递增递减也可用于字符串,布尔值,对象等,结果都将是数值:   ;v ...

  7. vue-wacth监听事件

    2019-08-05   0:20 Vue.js 监听属性 watch,我们可以通过 watch 来响应数据的变化. 以下实例通过使用 watch 实现计数器:(此时我就想了一下,好像绑定点击事件,也 ...

  8. response.getWriter()和jsp中的out对象的区别

    (1) out和response.getWriter属于的类不同,前者是JspWriter,后者是java.io.PrintWriter.而JspWriter是一个抽象类, PrintWriter是一 ...

  9. PHP学习 fwrite:Warning: fwrite(): supplied argument is not avalid stream resource in

    使用fwrite报错:Warning: fwrite(): supplied argument is not avalid stream resource in 解决方法:文件权限的问题,文件需要77 ...

  10. Netty之大名鼎鼎的EventLoop

    EventLoopGroup 与Reactor: 前面的章节中我们已经知道了,一个Netty 程序启动时,至少要指定一个EventLoopGroup(如果使用到的是NIO,通常是指NioEventLo ...