BZOJ 2754 喵星球上的點名(字尾陣列)

2021-09-07 23:10:50 字數 775 閱讀 2182

題意:給出n個字典串,m個詢問串。輸出每個詢問串出現在多少個字典串中。最後輸出每個字典串中含有多少個詢問串。

思路:將所有字典串和所有詢問串連在一起求sa和h陣列。統計時對於每個詢問串,設長度為len,向前向後掃一下h值大於等於len的區間。然後在這個區間中看有多少個字典串,就是這個詢問串的答案,同時將這些字典串包含詢問串個數加1。

int r[n],sa[n],wa[n],wb[n],wd[n],rank[n],h[n];

int cmp(int *r,int a,int b,int len)

void da(int *r,int *sa,int n,int m)

}void calheight(int *r,int *sa,int n)

}int b[n];

int n,m,m;

sets;

set::iterator it;

int c[n],d[n];

int ans[n],ans1[n];

void deal(int n)}}

int main()

m=p-1;

for1(i,m)

if(i

}r[p]=0;

da(r,sa,p+1,t);

calheight(r,sa,p);

deal(p);

for1(i,m) pr(ans[i]);

for1(i,n-1) printf("%d ",ans1[i]);

pr(ans1[i]);

}

bzoj2754 喵星球上的點名 字尾陣列

好久不寫字尾樹組了 好像以前也就寫過一遍吧 各種奇葩出錯。實際上即使是字尾樹組時間複雜度也是不對的。為o m len 另外ac自動機也可做,時間複雜度還是不對。可能可以用樹上的一些結構來統計保證時間複雜度,但具體沒有想過 首先將姓名和點名串用間隔符連起來跑字尾樹組 sam應該也行,但是後面完全不一樣...

喵星球上的點名

a180285幸運地被選做了地球到喵星球的留學生。他發現喵星人在上課前的點名現象非常有趣。假設課堂上有n個喵星人,每個喵星人的名字由姓和名構成。喵星球上的老師會選擇m個串來點名,每次讀出乙個串的時候,如果這個串是乙個喵星人的姓或名的子串,那麼這個喵星人就必須答到。然而,由於喵星人的字碼過於古怪,以至...

SCOI2012 喵星球上的點名

有n個串,代表n個人的姓氏和名字,都是用很多個數字表示的,比如我姓1,2,3,4,名4,5,6,7。然後有m個點名串,如果點到了某個人的姓或名裡面的某一串,那個人就被點到,不過乙個人在乙個點名串中只能被點一次。比如點名串是2,3,4,我的姓中含有2,3,4,那麼我就會被叫到。求每個學生分別被叫到多少...