ZOJ
来源:互联网 发布:豪沃克幕墙计算软件 编辑:程序博客网 时间:2024/06/18 01:25
题目:4个点A(0,0),B(p,0),C(m,q),D(m,n),保证p<m,q<n,求从A走到D和从B走到C两条路径不相交的走法的种数。
思路:用总的路径数-相交的路径数
相交的路径数就是A到C的路径数*B到D的路径数,因为他们之间必有交点E,A->E->C,B->E->D
代码:
#pragma comment(linker, "/STACK:1024000000,1024000000")#include<iostream>#include<algorithm>#include<ctime>#include<cstdio>#include<cmath>#include<cstring>#include<string>#include<vector>#include<map>#include<set>#include<queue>#include<stack>#include<list>#include<numeric>using namespace std;#define LL long long#define ULL unsigned long long#define INF 0x3f3f3f3f3f3f3f3f#define mm(a,b) memset(a,b,sizeof(a))#define PP puts("*********************");template<class T> T f_abs(T a){ return a > 0 ? a : -a; }template<class T> T gcd(T a, T b){ return b ? gcd(b, a%b) : a; }template<class T> T lcm(T a,T b){return a/gcd(a,b)*b;}// 0x3f3f3f3f3f3f3f3fconst LL MOD=100000007;const int maxn=3e5+50;LL fac[maxn],Inv[maxn];LL pow_mod(LL a,LL b){ LL res=1; while(b){ if(b&1) res=res*a%MOD; a=a*a%MOD; b/=2; } return res;}LL C(int n,int m){ return fac[n]*Inv[n-m]%MOD*Inv[m]%MOD;}int main(){ int m,n,p,q; fac[0]=Inv[0]=1; for(int i=1;i<maxn;i++){ fac[i]=fac[i-1]*(LL)i%MOD; Inv[i]=pow_mod(fac[i],(LL)(MOD-2)); } while(~scanf("%d%d%d%d",&m,&n,&p,&q)){ LL ans1=C(m+n,m)*C(m+q-p,q)%MOD; LL ans2=C(m+q,m)*C(m+n-p,n)%MOD; ans1=(ans1-ans2)%MOD; ans1=(ans1+MOD)%MOD; printf("%lld\n",ans1); } return 0;}
阅读全文
0 0
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- 迭代器(iterator)模式
- Git常用的命令
- 智能指针句柄类
- 平衡二叉树的旋转
- PHP程序员进阶学习书籍参考指南
- ZOJ
- Jquery插件之Growl
- PaaS平台——多租户的RBAC权限管理(一)基本概念
- import skimage.io ImportError: No module named skimage.io(编译pycaffe报错)
- 常用字符串Hash函数
- Hadoop学习笔记(二)--HDFS分布式文件系统(1)
- c/c++学习------>结构体
- 搭建SSH中出现的问题(Error configuring application listener of class)
- MySQL传统复制与GTID复制原理及操作详解