ZOJ 3624 Count Path Pair 排列組合

思路:在沒有限制條件時,很容易知道結果爲C(m+n,n)*C(m+q-p,q).ide

而後再把相交的狀況去除就能夠了。而若是想到了就是水題了……spa

求A->D,B->C相交的狀況能夠轉化爲求A->C,B->D的狀況。code

因此結果就爲C(m+n,n)*C(m+q-p,q)-C(m+q,m)*C(m+n-p,n).blog

代碼:it

 

#include<cstdio>
#include<algorithm>
#define M 200001
#define mod 100000007
#define ll long long
using namespace std;
ll inv(ll x)
{
    if(x==1) return 1;
    return inv(mod%x)*(mod-mod/x)%mod;
}
ll C(ll a,ll b)
{
    ll u=1,v=1,i,t;
    t=max(b,a-b);
    for(i=0;i<t;i++){
        u=u*(a-i)%mod;
        v=v*(i+1)%mod;
    }
    return u*inv(v)%mod;
}
int main()
{
    ll m,n,q,p;
    while(scanf("%lld%lld%lld%lld",&m,&n,&p,&q)!=EOF){
        ll ans=C(m+n,m)*C(m+q-p,q)%mod-C(m+q,m)*C(m+n-p,n)%mod;
        if(ans<0) ans=(ans+mod)%mod;
        printf("%lld\n",ans);
    }
    return 0;
}
View Code
相關文章
相關標籤/搜索