玄学错误求解释
查看原帖
玄学错误求解释
758962
banned_wanyb楼主2024/7/2 11:10

这两份代码有什么不一样吗,为什么一个过不了样例,一个AC。

这是AC的

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e6+5,M=1e6;
const int mod=998244353;
int t,l,n,f[N],g[N],inv[N],ans;
int C(int x,int y){
	if(x<y||x<0||y<0)return 0;
	return f[x]*g[y]%mod*g[x-y]%mod;
}
signed main() {
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	cin>>t;
	f[0]=g[0]=f[1]=g[1]=inv[1]=1;
	for(int i=2;i<=M;i++){
		inv[i]=inv[mod%i]*(mod-mod/i)%mod;
		f[i]=f[i-1]*i%mod;
		g[i]=g[i-1]*inv[i]%mod;
	}
	while(t--){
		cin>>l>>n;
		ans=C(l,2*n);
		for(int i=0;i<=l-2*n;i+=2){
			ans=(ans+mod-C(l-n-i,n)*C(i/2+n-1,n-1)%mod)%mod;
		}
		cout<<ans*2%mod<<"\n";
	}
	return 0;
}
/*
1
2 1
*/

这是过不了样例的

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define C(x,y) (x>=y&&x>=0&&y>=0?f[x]*g[y]%mod*g[x-y]%mod:0)
const int N=1e6+5,M=1e6;
const int mod=998244353;
int t,l,n,f[N],g[N],inv[N],ans;
signed main() {
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	cin>>t;
	f[0]=g[0]=f[1]=g[1]=inv[1]=1;
	for(int i=2;i<=M;i++){
		inv[i]=inv[mod%i]*(mod-mod/i)%mod;
		f[i]=f[i-1]*i%mod;
		g[i]=g[i-1]*inv[i]%mod;
	}
	while(t--){
		cin>>l>>n;
		ans=C(l,2*n);
		for(int i=0;i<=l-2*n;i+=2){
			ans=(ans+mod-C(l-n-i,n)*C(i/2+n-1,n-1)%mod)%mod;
			int a=i/2+n-1,b=n-1;
//			cout<<C(a,b)<<" "<<C(0,0)<<"\n";
		}
		cout<<ans*2%mod<<"\n";
	}
	return 0;
}
/*
1
2 1
*/
2024/7/2 11:10
加载中...