RT,大佬们看好:
#include<bits/stdc++.h>
using namespace std;
class FLOAT_MOD{
//实数取模类
public:
long long mod=1;
inline long long read(){//取模版快读
int f=1,x=0;char ch=getchar();
while(ch>'9'||ch<'0'){
if(ch=='-') f=-1;ch=getchar();
}
while(ch<='9'&&ch>='0'){
x=x*10%mod+(ch-'0');x%=mod;
ch=getchar();
}
return x*f%mod;
}
inline long long fpow(long long d,long long z,long long m)//快速幂
{
long long res=1;
while(z>0)
{
if(z%2!=0) res=res*d%m;
d=d*d%m;
z=z/2;
}
res%=m;
return res;
}
inline long long work(long long a,long long b){
return (a*fpow(b,mod-2,mod)%mod+mod)%mod;
}
};
class LUCAS{
public:
long long p=0;
FLOAT_MOD mod;
long long jc[2000000];
void getjc(){
memset(jc,0,sizeof jc);
jc[0]=1;mod.mod=p;
for(int i=1;i<=p*10;i++) jc[i]=(jc[i-1]*i)%p;
return;
}
long long C(long long n,long long m){
return mod.work(jc[n]%p,(jc[m]%p*jc[n-m]%p))%p;
}
long long lucas(long long n,long long m){
if(m==0) return 1;
return (C(n%p,m%p)%p*lucas(n/p,m/p)%p)%p;
}
};
int main(){
LUCAS lucas;
int t;cin>>t;
for(int i=1;i<=t;i++){
long long n,m,p;cin>>n>>m>>p;
lucas.p=p;
lucas.getjc();
cout<<lucas.lucas(n+m,n)<<endl;
}
}
这是一份丑陋的代码,提交上去却有数种不同结果
不开O2 不写return 0 80pts WA on #5
不开O2 不写return 0 WA on #4
有dalao知道是什么原因么
At 2022/8/11 19:11 p.m