博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
zoj-3624(Count Path Pair)组合数+乘法逆元
阅读量:4286 次
发布时间:2019-05-27

本文共 999 字,大约阅读时间需要 3 分钟。

题意:给你4个点A(0,0),B(p,0),C(m,q),D(m,n)问:A-->D&& B-->C在不相交的情况下有多少种方法

此题在比赛中题目理解错了,英语水平还是太弱,比了几场都没提高,唉

算了还是看题解吧:解决此题就是找出A--D&&B-->C的所有情况再减去    A-->C&&B-->D(即路径相交的情况)

就是本题要求的答案

公式:C(m+n,n)*C(m-p+q,q) - C(m+q,q)*C(m+n-p,n) 

本题还会涉及到(A/B)%C的情况,运用扩展欧几里得求乘法逆元得到结果

由于写过几遍了此公式,不再细讲

代码:

#include
#include
#include
using namespace std;typedef long long LL;const LL mod = 100000007;long long a[200005];LL m,n,p,q,x,y;void init(){ a[0] = 1; for(LL i = 1;i <= 200001;i++) a[i] = ( a[i-1] * i )%mod;}void exgcd(LL c,LL b){ if(b == 0) { x = 1,y = 0; } else { exgcd(b,c%b); LL tmp = x; x = y; y = tmp - c/b*y; }}void solve(){ LL res = (((a[m+n] * a[m-p+q])%mod - (a[m+q]*a[m+n-p])%mod)%mod + mod )%mod; LL ret = ((a[n]*a[m])%mod)*((a[m-p]*a[q])%mod)%mod; exgcd(ret,mod); x = (x+mod)%mod; printf("%lld\n",(x*res%mod));}int main(){ init(); while(~scanf("%lld%lld%lld%lld",&m,&n,&p,&q)) { solve(); }}

转载地址:http://tbsgi.baihongyu.com/

你可能感兴趣的文章
Bootstrap 模态框垂直居中处理
查看>>
Visual Studio Code v1.18发布
查看>>
Ionic2 相关文档整理
查看>>
Angular CLI简介
查看>>
Angular CLI简介2
查看>>
Angular2开发环境搭建之VS Code
查看>>
Angular 安全导航操作符(?.)和空属性路径
查看>>
Angular管道操作符(|)
查看>>
Angular模板引用变量(#var)
查看>>
Angular 内置结构型指令
查看>>
Angular 内置属性型指令
查看>>
cookie 跨域访问整理
查看>>
Angular中的模板和表达式简介
查看>>
Angular 绑定语法简介
查看>>
Ionic创建项目失败:[ERROR] Network connectivity error occurred, are you offline?
查看>>
Visual Studio Code v1.19发布
查看>>
Cordova 卸载
查看>>
NPM 设置代理
查看>>
nrm切换npm源利器
查看>>
curl工具使用简介
查看>>