多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > php開源 > php教程 > 【BZOJ2754】【SCOI2012】喵星球上的點(diǎn)名 后綴數(shù)組優(yōu)化暴力

【BZOJ2754】【SCOI2012】喵星球上的點(diǎn)名 后綴數(shù)組優(yōu)化暴力

來源:程序員人生   發(fā)布時(shí)間:2015-02-02 08:54:23 閱讀次數(shù):3437次

轉(zhuǎn)載請(qǐng)注明出處謝謝:http://blog.csdn.net/vmurder/article/details/42963375

題意:

那個(gè)輸入中每一個(gè)串先是1個(gè)長度然后才是串。

然后如果某貓姓名abcd?efgh,那末點(diǎn)名abc,bcd,fg等都是好使的,但是cde就不行。


然后輸入姓名時(shí)格式為1行

a a個(gè)數(shù),b b個(gè)數(shù)。

A表示姓,B表示名。


題解:

直接暴力枚舉每一個(gè)點(diǎn)名是哪些的子串,

然后我們發(fā)現(xiàn)可以用后綴數(shù)組來優(yōu)化這個(gè)事情~~


時(shí)間復(fù)雜度是不準(zhǔn)確的,也就是說可以被卡成TLE,但是大家都沒有寫正解,

所以應(yīng)當(dāng)不會(huì)有喪(Po)心(Po)病(Q)狂(Q)者(Q)去Hack這道題的。


所以安心亂弄吧。

代碼:

#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define N 501000 #define M 50100 #define inf 10100 using namespace std; int s[N],len; int sa[N],rank[N],height[N]; int cnt[N],val[N],_val[N]; int stk[N],top; int n,m,crs[N]; struct QUERY { int n,s; }Query[M]; int ans[M],vis[M]; void Input() { int i,j,k,fengefu=inf; scanf("%d%d",&n,&m); // 為了不多匹配,所以分隔符都不1樣 for(i=1;i<=n;i++) // 讀入每一個(gè)喵的姓名,中間有分隔符。 { for(scanf("%d",&k);k--;) { crs[len]=i; scanf("%d",&s[len++]); } s[len++]=++fengefu; for(scanf("%d",&k);k--;) { crs[len]=i; scanf("%d",&s[len++]); } s[len++]=++fengefu; } for(i=1;i<=m;i++) // 輸入每一個(gè)點(diǎn)名 { scanf("%d",&Query[i].n); Query[i].s=len; for(j=1;j<=Query[i].n;j++) scanf("%d",&s[len++]); s[len++]=++fengefu; } } inline bool cmp(int x,int y,int hl) {return val[x]==val[y]&&((x+hl>=len&&y+hl>=len)||(x+hl<len&&y+hl<len&&val[x+hl]==val[y+hl]));} void SA(int lim=256) { int i,j,k,hl; for(i=0;i<lim;i++)cnt[i]=0; for(i=0;i<len;i++)cnt[val[i]=s[i]]++; for(i=1;i<lim;i++)cnt[i]+=cnt[i⑴]; for(i=len⑴;i>=0;i--)sa[--cnt[val[i]]]=i; for(k=0;;k++) { top=0,hl=1<<k; for(i=0;i<len;i++)if(sa[i]+hl>=len)stk[++top]=sa[i]; for(i=0;i<len;i++)if(sa[i]>=hl)stk[++top]=sa[i]-hl; for(i=0;i<lim;i++)cnt[i]=0; for(i=0;i<len;i++)cnt[val[i]]++; for(i=1;i<lim;i++)cnt[i]+=cnt[i⑴]; for(i=len;i;i--)sa[--cnt[val[stk[i]]]]=stk[i]; for(i=lim=0;i<len;lim++) { for(j=i;j<len⑴&&cmp(sa[j],sa[j+1],hl);j++); for(;i<=j;i++)_val[sa[i]]=lim; } for(i=0;i<len;i++)val[i]=_val[i]; if(lim==len)break; } for(i=0;i<len;i++)rank[sa[i]]=i; for(k=i=0;i<len;i++) { if(k)k--; if(!rank[i])continue; while(s[i+k]==s[sa[rank[i]⑴]+k])k++; height[rank[i]]=k; } } void Work() { int i,j,k; int l,r,res; for(i=1;i<=m;i++){ l=r=rank[Query[i].s]; while(height[l]>=Query[i].n)l--; while(height[r]>=Query[i].n)r++; r--,res=0; for(j=l;j<=r;j++){ if(crs[sa[j]]){ if(vis[crs[sa[j]]]!=i){ vis[crs[sa[j]]]=i; res++; ans[crs[sa[j]]]++; } } } printf("%d ",res); } for(i=1;i<=n;i++) { printf("%d",ans[i]); if(i!=n)putchar(' '); } } int main() { freopen("test.in","r",stdin); Input(); SA(200000); Work(); return 0; }


生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 日本www视频 | 欧美另类图片小说 | 国产精品免费播放 | 丁香网五月 | 在线碰碰视频在线观看 | 国产视频一区二区在线观看 | 精品国产91乱码一区二区三区 | 好爽好大www视频在线播放 | 国产精品美乳免费看 | 在线观看视频免费入口 | 亚洲伊人成综合成人网 | 国产精品第44页 | 中文字幕一区二区三区在线播放 | 亚洲欧美日韩另类小说 | 成人在线播放av | 在线观看视频一区二区三区 | 欧美性猛交xxxx | jizz18中国| 午夜dj高清免费观看视频www | 日韩偷拍自拍 | 国产精品国产三级国产专不∫ | 欧美综合自拍亚洲综合百度 | 91最新免费地址入口 | 日韩国产欧美在线观看一区二区 | 免费在线视频一区 | 亚洲爱色 | 俄罗斯18videosex性欧美成人 | 国产亚洲小视频 | 欧美巨大xxxx做受中文字幕 | www.日本com| 超乳w真性中出し冲田杏梨101 | 国内在线精品 | 免费一级国产生活片 | 国产福利精品一区二区 | 亚洲色域网 | 欧美日韩国产成人综合在线 | 国产成人综合久久精品亚洲 | 国产精品久久久久久久久久久威 | 亚洲永久 | 九九精品视频在线播放8 | 亚洲国产欧美国产第一区二区三区 |