mxqz,代码喜氧
查看原帖
mxqz,代码喜氧
358739
BFSDFS123楼主2022/11/19 22:56

RT,我的代码不开 O2 就全部 RE,开了就过了

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define ll long long
#define eps 1e-8
const int inf=0x3f3f3f3f;
const int Maxn=1e7+10;
const int Mod=1e9+7;
int fac[Maxn];
int dfac[Maxn];
int qpow(int a,int b=Mod-2)
{
	int res=1;
	while(b)
	{
		if(b&1)
		{
			res=res*a%Mod;
		}
		a=a*a%Mod;
		b>>=1;
	}
	return res;
}
int D[Maxn];
int C(int x,int y)
{
	return fac[x]%Mod*dfac[y]%Mod*dfac[x-y]%Mod;
}
signed main()
{
	fac[0]=1;
	dfac[0]=qpow(1);
	for(int i=1;i<=1000000;i++)
	{
		fac[i]=fac[i-1]*i%Mod;
		dfac[i]=qpow(fac[i]);
	}
	
	D[1]=0;
	D[2]=1;
	D[3]=2;
	for(int i=4;i<=1000000;i++)
	{
		D[i]=(i-1)%Mod*(D[i-1]%Mod+D[i-2]%Mod)%Mod;
//		cout<<D[i]<<" ";
	}
	
	int q;
	scanf("%lld",&q);
	while(q--)
	{
		int n,m;
		scanf("%lld%d",&n,&m);
		if(n<=m)
		{
			puts("0");
			continue;
		}
		if(m==n)
		{
			puts("1");
		}else if(m==0){
			printf("%lld\n",D[n]);
		}else{			
			int ans=C(n,m)*D[n-m]%Mod;
			printf("%lld\n",ans);
		}
		
	}
	return 0;
}

2022/11/19 22:56
加载中...