提交时间:2026-06-16 20:12:10
运行 ID: 42126
#include<bits/stdc++.h> #define up(i,l,r) for(int i=(l);i<=(r);++i) #define down(i,l,r) for(int i=(l);i>=(r);--i) #define pi pair<int,int> #define p1 first #define p2 second #define m_p make_pair #define pb push_back #define eb emplace_back using namespace std; typedef long long ll; typedef __int128_t i128; typedef long double db; inline ll read(){ ll x=0;short t=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')t=-1;ch=getchar();} while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar(); return x*t; } const int N=1e7,p=998244353; const int prefac[]={1,295201906,160030060,957629942,545208507,213689172,760025067,939830261,506268060,39806322,808258749,440133909,686156489,741797144,390377694,12629586,544711799,104121967,495867250,421290700,117153405,57084755,202713771,675932866,79781699,956276337,652678397,35212756,655645460,468129309,761699708,533047427,287671032,206068022,50865043,144980423,111276893,259415897,444094191,593907889,573994984,892454686,566073550,128761001,888483202,251718753,548033568,428105027,742756734,546182474,62402409,102052166,826426395,159186619,926316039,176055335,51568171,414163604,604947226,681666415,511621808,924112080,265769800,955559118,763148293,472709375,19536133,860830935,290471030,851685235,242726978,169855231,612759169,599797734,961628039,953297493,62806842,37844313,909741023,689361523,887890124}; inline int qp(int a,int b){ int res=1; for(;b;b>>=1,a=a*1llu*a%p) if(b&1)res=res*1llu*a%p; return res; } inline int bigfac(int n){ int res=prefac[n/N]; up(i,n/N*N+1,n)res=res*1llu*i%p; return res; } int n,m,x,a[N+10],f[N+10],fac[N+10],ifac[N+10],pre[N+10],inv[N+10]; inline int C(int n,int m){return fac[m]*1llu*ifac[m-n]%p*ifac[n]%p;} inline int binom(int n,int m){if(n<0||m<0||m<n)return 0;return bigfac(m)*1llu*qp(bigfac(n),p-2)%p*qp(bigfac(m-n),p-2)%p;} void slv(){ n=read(),m=read(),x=read();int t=m+x; fac[0]=1;up(i,1,n+1)fac[i]=fac[i-1]*1llu*i%p; ifac[n+1]=qp(fac[n+1],p-2);down(i,n+1,1)ifac[i-1]=ifac[i]*1llu*i%p; a[1]=1;vector<int>pr; int v=min(n,t-1); up(i,2,v){ if(!a[i])pr.eb(i),a[i]=qp(i,n); for(int j:pr){ if(i*j>n)break; a[i*j]=a[i]*1llu*a[j]%p; if(!(i%j))break; } } pre[0]=t;up(i,1,v)pre[i]=pre[i-1]*1llu*(t-i)%p; inv[v]=qp(pre[v],p-2);down(i,v,1)inv[i-1]=inv[i]*1llu*(t-i)%p; up(i,1,v)inv[i]=pre[i-1]*1llu*inv[i]%p; int u=binom(n+m,t-1); int res=0; up(i,0,v){ int v=p-t;if((n+1-i)&1)v=p-v; v=v*1llu*C(i,n+1)%p*u%p; if(!i)v=(v+t*1llu*binom(m-1,t-1))%p; else v=(v+(t+1-m-i)*1llu*f[i-1])%p; f[i]=v*1llu*inv[i]%p; res=(res+a[i]*1llu*f[i])%p; } cout<<res; } int main(){ // freopen("1.in","r",stdin),freopen("1.out","w",stdout); slv(); return 0; }