Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
24629 | liuyile | 【S】T2 | C++ | 运行超时 | 80 | 1000 MS | 280 KB | 1433 | 2024-01-11 14:41:22 |
#include<bits/stdc++.h> #define int long long using namespace std; int n,m; const int M=1e9+7; const int MAXN=1e6+10; int fac[2*MAXN],iv[2*MAXN]; inline int qp(int a,int x){ int res=1; while(x){ if(x&1)res=res*a%M; a=a*a%M; x>>=1; } return res; } inline int inv(int x){return qp(x,M-2);} inline int C(int n,int m){ if(n<m||m<0||n<0)return 0; if(n>2e6){ int fz=1,fm=iv[m]; for(int i=n;i>n-m;i--) fz=fz*i%M; return fz*fm%M; } return fac[n]*iv[m]%M*iv[n-m]%M; } inline int A(int n,int m){ if(n<m||m<0||n<0)return 0; return fac[n]*iv[n-m]%M; } inline int BOX(int n,int m){ return C(n+m-1,m-1); } inline int CAT(int n){ return (C(2*n,n)-C(2*n,n-1)+M)%M; } int f[110][110]; int t[110][110]; inline void add(int &x,int y){ x+=y; if(x>=M)x-=M; } signed main(){ //freopen("life.in","r",stdin); //freopen("life.out","w",stdout); ios::sync_with_stdio(0); //fac[0]=iv[0]=1; // for(int i=1;i<=2e6;i++) // fac[i]=fac[i-1]*i%M,iv[i]=inv(fac[i]); cin>>n>>m; int res=0; int ndc=1,n1dc=1,mdc=m; int faci1=1; for(int i=1;i<=n;i++){ add(res,ndc*inv(faci1)%M*n1dc%M*inv(faci1)%M*mdc%M*inv(i)%M); faci1=faci1*i%M; ndc=ndc*(n-i+1)%M; n1dc=n1dc*(n-i+1-1)%M; mdc=mdc*(m-i)%M; } cout<<res<<endl; return 0; }