POJ 3294 Life Forms(字尾陣列)

2021-09-25 15:54:33 字數 834 閱讀 8113

解題思路:

求出所有 最長的 出現在超過一半所給字串的 子串。

這題是在錯自閉了可以去poj discuss裡面,有本題資料的。

反正我是瘋狂ole,re了一晚上。

最後發現ole是**寫錯導致輸出的串的數量不對(其實也就是wa),所以導致debug的方向就出錯了。

做法是二分答案,判斷是否可行,可行就記錄當前所有可行的起點。

判斷方法就是把height按照》=k分成一組組,每一組內部看是否屬於至少有超過一半的字串有這個部分。

二分最後得到乙個答案以及一堆起點,由於需要按照字典序輸出。

所以扔進set排個序再扔出來。

**:

#include#include#include#include#include#include#includeusing namespace std;

#define ll long long

#define for1(i,a,b) for (int i=a;i<=b;i++)

#define for0(i,a,b) for (int i=a;isss;

void buildsa(int n,int m)

}if (cnt>=need && flag)

cnt = 0;

memset(vis,false,sizeof vis);

i = j;}}

return flag;

}int main()

if (r==0)

else }}

return 0;

}

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(字尾陣列)

題意 有n個字串,詢問找出乙個最長的子串在一半以上的字串 現過,若沒有,則輸出 1 題解 把每個字串鏈結在一起,中間加上分隔符,計算出h陣列,利用h陣列將字尾分組的性質,我們就可以二分長度,然後再判斷每一組的字首是否出現過一半以上即可。ac include include include using...