为什么MLE了???
查看原帖
为什么MLE了???
433406
按Ctrl加W会AKIOI楼主2020/11/18 21:33

题目:卢卡斯定理

为什么MLE了???还卡死掉,没输出,但没有显示RE,时间也很快。

代码:

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5;
int n,m,p,a[maxn+1],b[maxn+1],t;
int C(int x,int y,int mod){
	if(y>x)return 0;
	return (long long)a[x]*b[x-y]%mod*b[y]%mod;
}
int lucas(int x,int y,int mod){
	if(!m)return 1;
	return (long long)C(x%mod,y%mod,mod)*lucas(x/mod,y/mod,mod)%mod;
}
inline int read(){
	int s=0,w=1;char ch=getchar();
	while(ch<'0'||ch>'9'){
		if(ch=='-')w=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9'){
		s=(s<<3)+(s<<1)+(ch^48);
		ch=getchar();
	}
	return s*w;
}
void work(){
	n=read();m=read();p=read();
	a[0]=b[0]=a[1]=b[1]=1;
	n+=m;
	for(int i=2;i<=p;i++){
		b[i]=-(long long)(p/i)*b[p%i]%p;
	}
	for(int i=2;i<=p;i++){
		a[i]=(long long)a[i-1]*i%p;
		b[i]=(long long)b[i-1]*b[i]%p;
	}
	printf("%d\n",(lucas(n,m,p)+p)%p);
}
signed main(){
	t=read();
	while(t--){
		work();
	}
	return 0;
} 

有没有人帮帮忙,谢谢。

2020/11/18 21:33
加载中...