webpack——構建前端工程化專案
阿新 • • 發佈:2021-12-23
會板子不能讓我會做題..
大概只是粘板子之類的..
卡特蘭數
\[Cat_i=\frac{\binom{2i}{i}}{i+1} \]見得比較多的問題是網格路徑數和單調棧相關的計數。另外有遞推
\[Cat_n=\begin{cases}\sum_{i=1}^nCat_{i-1}Cat_{n-i} & n\leq 2,n\in\mathbb{N_+}\\1 & n=0,1\end{cases} \]看到這樣的 \(DP\) 遞推式可以直接求卡特蘭數。如果模數不是質數可以考慮分解質因子計算貢獻。
例(有趣的數列)
const int NN=2000010; int n,mod,tot,ans,pri[NN],low[NN],cnt[NN]; int qpow(int a,int b){ int res=1; for(;b;b>>=1){ if(b&1) res=res*a%mod; a=a*a%mod; } return res; } void get(){ for(int i=2;i<=2*n;i++){ if(!low[i]) pri[++tot]=i,low[i]=i; for(int j=1;j<=tot&&pri[j]*i<=2*n;j++){ low[i*pri[j]]=pri[j]; if(i%pri[j]==0) break; } } } signed main(){ n=read(); mod=read(); get(); ans=1; for(int i=1;i<=n;i++) --cnt[i]; for(int i=n+2;i<=2*n;i++) ++cnt[i]; for(int i=n*2;i>1;i--) if(low[i]<i){ cnt[low[i]]+=cnt[i]; cnt[i/low[i]]+=cnt[i]; } for(int i=2;i<=2*n;i++) if(low[i]==i) (ans*=qpow(i,cnt[i]))%=mod; write(ans,'\n'); return 0; }
prufer序列
其實構造之類的並不會
但應該也不會考構造這玩意,主要就是用於樹的計數。