萌新刚学OI,求助
查看原帖
萌新刚学OI,求助
678087
fangzichang楼主2022/8/4 21:50
#include<bits/stdc++.h>
#define int long long
//英特纳雄耐尔一定要实现
using namespace std;
const int N=1e6+10;
const int mod=1e9+7;
int T;
int cp[N],jc[N],n,m;
//cp 错排 jc 阶乘
inline void read(int &x){
	x=0;int f=1;char ch=getchar();
	while (ch<'0'||ch>'9'){if(ch=='-') f=-1;ch=getchar();}
	while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
	x*=f;
}
#define cin(x) read(x)
signed main(){
//	freopen(".in","r",stdin);
//	freopen(".out","w",stdout);
	cin(T);
	cp[1]=0;
	cp[2]=1;
	cp[3]=2;
	for(int i=4;i<N;i++){
		cp[i]=(i-1)*(cp[i-1]+cp[i-2])%mod;
	}
	jc[0]=1;
	for(int i=1;i<N;i++){
		jc[i]=(jc[i-1]*i)%mod;
	}
	while(T--){
		cin(n);
		cin(m);
        if(n-m==1) printf("0\n");
        else if(m==n) printf("1\n");
        else if(m==0) printf("%lld\n",cp[n]);
        else{
			int ans=jc[n]/jc[m]/jc[n-m];
			ans=(ans*cp[n-m])%mod;
			cout<<ans<<endl;
		}
	}
	return 0;
}

(公式都是贺的)
rt,不知道为甚,除了特判全输出0,求神犇帮忙看看(

2022/8/4 21:50
加载中...