<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      2020CCPC秦皇島H.Holy Sequence

      題目

      好久沒寫題解了,做了個計數感覺有點妙妙,就來口胡一波。

      由于我們要對于每一個\(t\)單獨計算答案,所以必然要先枚舉\(t\),考慮一個\(n\)-holy序列的前綴最大值每次最多只能增加\(1\),必然可以化為\(1......2......3......4......5.......t\)的形式。我們枚舉\(t\)第一次出現的位置為\(i\)\(i\)前面的方案數可以用一個dp預處理出來。觀察這個dp的轉移發現其實就是第二類斯特林數

      這樣\(t\)出現的位置必然在\(i\)以及\(i\)之后,考慮一個經典的恒等式\(x^2=2\times \binom{x}{2}+\binom{x}{1}\)。以計算\(\binom{x}{2}\)為例,我們完全可以欽定兩個位置填\(t\),其余位置構成一個合法序列即可算貢獻即可,而注意到我們欽定了\(i\)\(t\),那么\(i\)之后的位置填\(t\)都是合法的,所以我們其實并不是很關心這兩個位置到底在哪里,在\(i\)后面用組合數隨便欽定兩個位置即可。

      最后還需要求出\(i\)\(t\)后面的合法方案數,發現從\(i\)填到\(n\)需要強行從\(t\)開始難以處理,于是考慮從\(n\)倒著向\(i\)搞一個dp,這樣數是從大到小的,并不需要強行令\(t\)作為開頭。

      預處理第二類斯特林數和這個反向的\(dp\),就能\(O(n)\)回答一個\(t\)的答案了。

      代碼

      #include<bits/stdc++.h>
      #define re signed
      const int maxn=3005;
      int n,mod,g[maxn][maxn],h[maxn][maxn];
      inline int qm(int x) {return x>=mod?x-mod:x;}
      inline int calc(int x) {return (1ll*x*(x-1)/2ll)%mod;}
      int main() {
      	int Test;scanf("%d",&Test);
      	for(re int te=1;te<=Test;++te) {
      		scanf("%d%d",&n,&mod);
      		for(re int i=0;i<=n+1;++i)
      			for(re int j=0;j<=n+1;++j)g[i][j]=h[i][j]=0;
      		g[0][0]=1;
      		for(re int i=0;i<n;i++)
      			for(re int j=0;j<=i;++j) {
      				if(!g[i][j]) continue;
      				g[i+1][j+1]=qm(g[i+1][j+1]+g[i][j]);
      				g[i+1][j]=qm(g[i+1][j]+1ll*g[i][j]*j%mod);
      			}
      		for(re int i=1;i<=n;i++)h[0][i]=1;
      		for(re int i=0;i<n;i++)
      			for(re int j=n;j;--j) {
      				if(!h[i][j]) continue;
      				h[i+1][j]=qm(h[i+1][j]+1ll*h[i][j]*j%mod);
      				if(j-1>0) h[i+1][j-1]=qm(h[i+1][j-1]+h[i][j]);
      			}
      		printf("Case #%d:\n",te);
      		for(re int t=1;t<=n;++t) {
      			int ans=0;
      			for(re int i=1;i<=n;i++) {
      				if(!g[i-1][t-1]) continue;
      				int tot=h[n-i][t];
      				if(n-i-1>=0) tot=qm(tot+3ll*h[n-i-1][t]%mod*(n-i)%mod);
      				if(n-i-2>=0) tot=qm(tot+2ll*h[n-i-2][t]%mod*calc(n-i)%mod);
      				ans=qm(ans+1ll*tot*g[i-1][t-1]%mod);
      			}
      			printf("%d ",ans);
      		}
      		puts("");
      	}
      	return 0;
      }
      
      posted @ 2021-10-30 19:30  asuldb  閱讀(236)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 精品无码国产日韩制服丝袜| 精品国偷自产在线视频99| 99久久无码一区人妻a黑 | 亚洲欧美不卡视频在线播放| 欧美大胆老熟妇乱子伦视频| 天天躁夜夜躁狠狠喷水| 丰满无码人妻热妇无码区| 亚洲国产成人综合自在线| 日韩有码中文字幕av| 日本高清视频网站www| 一道本AV免费不卡播放| 亚洲精品国产av成拍色拍个| 久久综合色一综合色88欧美| 日产精品一区二区三区免费| 8x国产精品视频| 国产成人一区二区三区视频免费 | 天天影视色香欲综合久久| 一区二区三区鲁丝不卡| 无码乱人伦一区二区亚洲| 亚洲中文字幕无码中字| 色爱无码av综合区| 日韩精品人妻黄色一级片| 国产一区二区在线有码| 四虎影视久久久免费| 国产成人精品一区二区三区免费| 日韩午夜一区二区福利视频| 99在线视频免费观看| av深夜免费在线观看| 毛片网站在线观看| 成人嫩草研究院久久久精品| 免费超爽大片黄| 亚洲一区二区av高清| 日本伊人色综合网| 激情综合网激情五月伊人| 国产精品中文字幕久久| 亚洲三区在线观看内射后入| 四虎成人精品在永久免费| 91中文字幕一区二区| 久久96国产精品久久久| 国产精品久久久久久久9999| 国产成人免费一区二区三区|