%zsy %lqs 隨感

今天是cj的大毒瘤zsy(對對,您說的都對,題目不難的啦,是我太菜啦)出題。c++

我校選手lqs仍然堅持高水平的發揮,wzy神犇卻不在狀態。ide

面對T1sb題(其實幹了2h)和T3的原題(我&lqs&wzy當初一塊兒花了1.5h切了的not that hard problem),果斷3h寫完230分開始頹b站(大力哥出獄啦,鬼畜真心爽啊)。spa

隨後當了一把星際選手,眼瞎般的交錯了代碼。嗚嗚嗚。。。code

省選前考試的狀態一點也沒有,感受只會寫水題(還寫不對),被wzy&lqs&nickluo&...爆踩。blog

我不想退役啊。。。看來要更認真才行了。it

否則之後就不必定能踩lqs了,那多不爽啊。。。class

左:lqs,右:xyim

20190311d3

 

20190312db

 

主要記一下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; }
View Code

再次%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進國家隊了。。。

相關文章
相關標籤/搜索