Wa
查看原帖
Wa
120947
PurslaneM2GA楼主2022/7/9 23:54

这道题我总是Wa在几个点。

最后根据题解重构,还是同样的错误。大家能不能帮忙看一下。

#include<bits/stdc++.h>
#define int long long
#define ffor(i,a,b) for(int i=(a);i<=(b);i++)
#define roff(i,a,b) for(int i=(a);i>=(b);i--)
using namespace std;
const int MAXN=5e6+10,MOD=1e9+7;
int T,n,k,p2[MAXN],fuc[MAXN],inv[MAXN];
int qpow(int base,int p) {
	int ans=1;
	while(p) {
		if(p&1) ans*=base,ans%=MOD;
		base*=base,base%=MOD,p>>=1;
	}
	return ans;
}
int C(int up,int down) {
	return fuc[down]*inv[down-up]%MOD*inv[up]%MOD;
}
void work(void) {
	cin>>n>>k;
	int ans=0,m=k/2;
	if(k%2==0) {
		ffor(i,1,min(n,m)) ans+=C(i,m)*C(i-1,n-1)%MOD*p2[i]%MOD,ans%=MOD;
		cout<<ans<<'\n';
	}
	else {
		ffor(i,1,min(n,m)) ans+=C(i,m)*C(i-1,n-1)%MOD*p2[i]%MOD,ans%=MOD;
		ffor(i,1,min(n-1,m)) ans+=C(i,m)*C(i-1,n-2)%MOD*p2[i]%MOD,ans%=MOD;
		cout<<ans<<'\n';
	}
}
signed main() {
	ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
	fuc[0]=1;
	int MX=5000000;
	ffor(i,1,MX) fuc[i]=fuc[i-1]*i%MOD;
	inv[MX]=qpow(fuc[MX],MOD-2);
	roff(i,MX-1,0) inv[i]=inv[i+1]*(i+1)%MOD;
	p2[0]=1;
	ffor(i,1,MX) p2[i]=p2[i-1]*2%MOD;
	cin>>T;
	while(T--) work(); 
	return 0;	
}
2022/7/9 23:54
加载中...