1. 程式人生 > 其它 >webpack——構建前端工程化專案

webpack——構建前端工程化專案

會板子不能讓我會做題..

大概只是粘板子之類的..

卡特蘭數

\[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序列

其實構造之類的並不會

但應該也不會考構造這玩意,主要就是用於樹的計數。