牛客网暑期ACM多校训练营(第一场)A : Monotonic Matrix

比赛的时候不会写这个题,一直在找规律,可惜找不到。。。然后就放弃了这个题
今天补题看了题解又不是很懂,花了大半天的时间去理解叉姐的解题思路,终于理解了一点

#include<bits/stdc++.h>
using namespace std;

typedef long long ll;
const ll mod=1e9+7;
const int maxn=1000+100;

ll f[maxn*2],inv[maxn*2];

ll mypow(ll a,ll b){

    ll sum=1;
    while(b){

        if(b&1) sum=sum*a%mod;
        a=a*a%mod;
        b>>=1; 
    }
    return sum;
}

void init(){

    f[0]=1;
    for(int i=1;i<maxn*2;i++) f[i]=f[i-1]*i%mod;
    inv[maxn*2-1]=mypow(f[maxn*2-1],mod-2);
    for(int i=maxn*2-2;i>=0;i--) inv[i]=inv[i+1]*(i+1)%mod;
}

inline ll C(int a,int b){

    if(a<b) return 0;
    return f[a]*inv[b]%mod*inv[a-b]%mod;
}

int main(){

    init();
    int n,m;
    while(scanf("%d%d",&n,&m)==2){

        ll tmp=(C(n+m,n)*C(n+m,n)%mod-C(n+m,n+1)*C(n+m,n-1)%mod+mod)%mod;
        printf("%lld\n",tmp);
    }
} 

猜你喜欢

转载自blog.csdn.net/qq_37960603/article/details/81156517