pku3294 字尾樹組 3

2021-05-27 18:02:22 字數 1079 閱讀 8905

題意:給定100個字串,所有串的總字元數不超過100000,求最長的乙個串保證這個串在》n/2的串中出現過。。如果有多個,按字典序輸出。。

分析:一直木有寫過字尾陣列+二分的題目。。總是控制不好。。

和其他題目一樣,可以想到用不同的字元隔開將這些串串成乙個串。。。求得height陣列,然後就是二分最長的串的長度,求得這個最大長度。。對每個長度進行判斷時,掃瞄一遍height陣列,看對每乙個連續的》=temp_len的區間的字尾是不是來自大於n/2個原串。。。最後輸出的話用判斷時類似的方法即可。。。

同類題目:

pku 3080 求最長的串出現在所有串中。。。

pku 1226 求乙個串出現在所有的(本串或其倒置的串)中。。。

注意:解決這類問題時n==1一定要單獨考慮。。。填入的引數一定要大於字元的種數,否則re。。。。。。

**:#include#include#define maxn 101001

int wa[maxn],wb[maxn],wv[maxn],ws[maxn];

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

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

for(k=i-1; kn/2)

return 1;

i = j;

} return 0;

}void print(int tlen)

int i, j, k, cnt;

i = j = 1;

while(i<=len && j<=len)

for(k=i-1; kn/2)

ans = r;

//printf("%d.....\n", ans);//...

print(ans);

}int main()

{ int i, j, k;

scanf("%d", &n);

while(1)

{ if(n==0)

break;

up = 140;

mx = 1;

for(i=0, j=0; imx)

mx = len1;

for(k=0; k

ural1297字尾樹組 2

題意 給定乙個字串,輸出其最大回文子串 分析 可以用manacher很方便求解,也可以用字尾陣列。對字尾樹組而言,先中間設定乙個不存在的值,反向接到後面。rmq處理之後,每次對lcp i,n i 1 求以i為中心的奇數的回文串,lcp i,n i 求以i和i 1為中心的偶數回文串長度。include...

POJ3581 Sequence 字尾樹組

題意 n個數字組成的序列,第乙個數字最大,把序列分成3部分,每個部分分別翻轉,輸出翻轉後字典序最小的序列。字尾陣列變一下,先求出 第乙個分割的位置,然後再求一次字尾陣列,求出第二個位置。輸出就好了。此題要採用單組輸入。1 include 2 include 3 include 4 include 5...

FZU 2137 奇異字串 字尾樹組 RMQ

題目連線 題解 列舉x位置,向左右延伸計算答案 如何計算答案 對字串建立sa,那麼對於想雙延伸的長度l,假如有lcp i l,i 1 l那麼就可以更新答案 複雜度 建立sa,lcp等nlogn,列舉x及向兩邊延伸26 n include include include include include...