这两份代码有什么不一样吗,为什么一个过不了样例,一个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
*/