题解 | 【模板】组合数

【模板】组合数

https://www.nowcoder.com/practice/53f82db091b2452bae5fef4437ffd0bb

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

const int P=1e9+7,N=5e5+10;

int power_num[N],jicheng_num[N];

int power(int a,int b,int p){
	int ans=1;
	a=a%P;
	while(b>0){
		if(b&1==1){
			ans=ans*a%p;
		}
		a=a*a%p;
		b=b>>1;
	}
	return ans;
}

void pre(){
	jicheng_num[0]=1;
	power_num[0]=1;
	for(int i=1;i<=N;i++){
		jicheng_num[i]=i*jicheng_num[i-1]%P;
	}
	power_num[N]=power(jicheng_num[N],P-2,P);
	for(int i=N-1;i>=1;i--){
		power_num[i]=(power_num[i+1]*(i+1))%P;
	}
	return;
}

int T,n,m;

void solve(){
	
	int m_jicheng=jicheng_num[m];
	
	int n_power=power_num[n];
	int mn_power=power_num[m-n];
	
	int n_mn_power=n_power*mn_power%P;

	int c_nm=m_jicheng*n_mn_power%P;
	
	cout<<c_nm<<endl;
	return;
}

signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	
	pre();
	
	cin>>T;
	
	while(T--){
		cin>>n>>m;
        if(n==0&&m==0){
            cout<<1<<endl;
            continue;
        }
		solve();
	}
	
    return 0;
}


全部评论

相关推荐

King987:待优化的地方还是挺多的,可以参考一下我的作品优化一下,优化不好的话也可以找我
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务