今天是cj的大毒瘤zsy(對對,您說的都對,題目不難的啦,是我太菜啦)出題。
我校選手lqs仍然堅持高水平的發揮,wzy神犇卻不在狀態。
面對T1sb題(其實干了2h)和T3的原題(我&lqs&wzy當初一起花了1.5h切了的not that hard problem),果斷3h寫完230分開始頹b站(大力哥出獄啦,鬼畜真心爽啊)。
隨后當了一把星際選手,眼瞎般的交錯了代碼。嗚嗚嗚。。。
省選前考試的狀態一點也沒有,感覺只會寫水題(還寫不對),被wzy&lqs&nickluo&...爆踩。
我不想退役啊。。。看來要更認真才行了。
不然以后就不一定能踩lqs了,那多不爽啊。。。
左:lqs,右:xy
20190311
20190312
主要記一下T1吧,$f_{i,j}=f_{i,j}+\sum_{k=0}^{j-1} f_{i-1,k}*(k+1)$
考慮$f_{i,j}-f_{i,j-1}=f_{i-1,j}+(j-1)*f_{i-1,j-1}$,即$f_{i,j}=f_{i-1,j}+f_{i,j-1}+(j-1)*f_{i-1,j-1}$
不難認為這是一個平面數路徑問題,斜邊邊權為j,開始計數
不難發現走的斜邊個數相同的情況對應的NE lattice path的計數系數是一樣的
於是分治fft一下,利用第一類斯特林數的O(nlogn)做法,我們也可以做到O(nlogn)。

#include<bits/stdc++.h>
using namespace std; const int N=4000005,mod=998244353; int n,m,ans,a[N],b[N],S[N],r[N],fac[N],ifac[N]; inline int pw(int a,int b){int r=1;for(;b;b>>=1,a=1ll*a*a%mod)if(b&1)r=1ll*r*a%mod;return r;} inline int C(int a,int b){return 1ll*fac[a]*ifac[b]%mod*ifac[a-b]%mod;} inline void ntt(int n,int *a,int f) { int l=0;while((1<<l)<n)l++; for(int i=1;i<n;i++)r[i]=r[i>>1]>>1|(i&1)<<(l-1); for(int i=0;i<n;i++)if(i<r[i])swap(a[i],a[r[i]]); for(int i=1;i<n;i<<=1) { int wn=pw(3,(mod-1)/(i<<1)); if(f==-1)wn=pw(wn,mod-2); for(int j=0;j<n;j+=(i<<1))for(int k=0,w=1;k<i;k++,w=1ll*w*wn%mod){int u=a[j+k],v=1ll*a[j+k+i]*w%mod;a[j+k]=(u+v)%mod;a[j+k+i]=(u+mod-v)%mod;} } if(f==-1)for(int i=0,iv=pw(n,mod-2);i<n;i++)a[i]=1ll*a[i]*iv%mod; } void sol(int n) { if(n==1){S[0]=0;S[1]=1;return;} if(n&1){sol(n-1);for(int i=n;i;i--)S[i]=(S[i-1]+1ll*(n-1)*S[i])%mod;return;} sol(n>>1);n>>=1; for(int i=0,p=1;i<=n;i++)a[i]=1ll*p*ifac[i]%mod,p=1ll*p*n%mod; for(int i=0;i<=n;i++)b[i]=1ll*fac[n-i]*S[n-i]%mod; n++;int nn=1;while(nn<(n<<1))nn<<=1; for(int i=n;i<nn;i++)a[i]=b[i]=0; ntt(nn,a,1);ntt(nn,b,1); for(int i=0;i<nn;i++)a[i]=1ll*a[i]*b[i]%mod; ntt(nn,a,-1);reverse(a,a+n); for(int i=0;i<n;i++)a[i]=1ll*a[i]*ifac[i]%mod; for(int i=n;i<nn;i++)S[i]=a[i]=0; ntt(nn,S,1);ntt(nn,a,1); for(int i=0;i<nn;i++)S[i]=1ll*S[i]*a[i]%mod; ntt(nn,S,-1); } int main() { freopen("color.in","r",stdin); freopen("color.out","w",stdout); scanf("%d%d",&n,&m);n--;m--; if(!n||!m){puts("1");return 0;} for(int i=fac[0]=1;i<=n+m;i++)fac[i]=1ll*fac[i-1]*i%mod; ifac[n+m]=pw(fac[n+m],mod-2); for(int i=n+m;i;i--)ifac[i-1]=1ll*ifac[i]*i%mod; n++;sol(n);n--; for(int i=0;i<=n;i++)ans=(ans+1ll*C(n+m-i,n)*S[n+1-i])%mod; printf("%d\n",ans); return 0; }
再次%zsy,%lqs。奶一口zsy和lqs省隊穩啦。
(決定啦,像lqs這樣又假又強的人后天我xy一定要認真地踩他一次,23333,xy加油啦。)
Upd1:zsy果然穩 orz HN隊長!~
Upd2:lqs tql, 所以踩lqs的計划一直咕咕咕~
Upd3:在JSOI2019R2中終於比lqs高一點了(開心!),所以lqs似乎被我送出隊了。。。
(不過一共4個名額,我校內rk3應該不怪我吧QwQ)~
Upd4:據說。。。lqs應該可能有希望進隊?如果學長們進國家隊的話。。。
Upd5:lqs進隊了,因為FizzyDavid進國家隊了。。。