POJ 3294 Life Forms(字尾陣列)

2021-09-29 20:33:39 字數 1077 閱讀 9375

題意:

有n個字串,詢問找出乙個最長的子串在一半以上的字串**現過,若沒有,則輸出-1

題解:把每個字串鏈結在一起,中間加上分隔符,計算出h陣列,利用h陣列將字尾分組的性質,我們就可以二分長度,然後再判斷每一組的字首是否出現過一半以上即可。

ac**:

#include

#include

#include

using

namespace std;

const

int maxn =

1e6+

200;

const

int maxm =

105;

char a[maxn]

;int s[maxn]

;int rk[maxn]

,y[maxn]

,c[maxn]

,sa[maxn]

,h[maxn]

;int vis[maxm]

,ans[maxn]

,len[maxm]

;inline

voidsa(

int n,

int m)

}inline

voidh(

int n)

}inline

bool

check

(int mid,

int n,

int k)

}else}if

(cnt>k/

2) ans[

++sz]

=sa[n];if

(sz)

return

false;}

intmain()

s[n-1]

=0;sa

(n,255);

h(n-1)

;int l=

1,r=n;

while

(l<=r)

if(l==1)

puts

("?");

else

}puts(""

);}return0;

}

poj 3294 字尾陣列

題意 給定n個串,求最長的子串s,使得s為其中超過一半的串的公共子串。題解 字尾陣列,按height陣列分組,按sa陣列輸出。include include include using namespace std const int maxn 200000 int s maxn w maxn wa ...

poj3294 字尾陣列emmm

tle一下午,memset不能用太多,吧memset的陣列大小設定成正好,別設定太大 include include include include include include include include include include includeusing namespace std ...

POJ 3294 Life Forms(字尾陣列)

解題思路 求出所有 最長的 出現在超過一半所給字串的 子串。這題是在錯自閉了可以去poj discuss裡面,有本題資料的。反正我是瘋狂ole,re了一晚上。最後發現ole是 寫錯導致輸出的串的數量不對 其實也就是wa 所以導致debug的方向就出錯了。做法是二分答案,判斷是否可行,可行就記錄當前所...