提交时间:2025-03-02 15:24:00

运行 ID: 37071

#include<bits/stdc++.h> #define int long long using namespace std; const int mod=998244353; const int N=1e7+7; int Fac[N],iFac[N]; int id,r,g,b; inline int qpow(int a,int b){ int ans=1; while(b){ if(b&1)ans=ans*a%mod; a=a*a%mod; b>>=1; } return ans; } inline void Init(){ Fac[0]=1; for(int i=1;i<N;i++)Fac[i]=Fac[i-1]*i%mod; iFac[N-1]=qpow(Fac[N-1],mod-2); for(int i=N-1;i>=1;i--)iFac[i-1]=iFac[i]*i%mod; } inline int C(int n,int m){ return (m<0||n<m?0:Fac[n]*iFac[n-m]%mod*iFac[m]%mod); } inline int Calc(int t){ int Ans=0; for(int X0=0;X0<=t;X0++){ int Sum=t-X0,Sub=g-b; if((Sum+Sub)&1)continue; int Pos=(Sum+Sub)>>1,Ne=Sum-Pos; if(Pos<0||Ne<0)continue; int P1=Fac[t]*iFac[X0]%mod*iFac[Pos]%mod*iFac[Ne]%mod; int P2=C(g-X0-Pos+t-1,t-1)*qpow(2,X0); (Ans+=P1*P2%mod)%=mod; } return Ans; } signed main(){ freopen("displayer.in","r",stdin); freopen("displayer.out","w",stdout); cin>>id>>r>>g>>b; int S=r+g+b; Init(); // for(int i=1;i<=10;i++)cout<<Fac[i]<<" "<<iFac[i]<<endl; if(max(max(r,g),b)>(S+1)/2){ cout<<0<<endl; return 0; } cout<<(Calc(r-1)+Calc(r)*2+Calc(r+1))%mod<<endl; return 0; }