EOJ 1805 字串匹配 字尾陣列

2021-08-15 13:07:37 字數 765 閱讀 6969

給你 2 個字串(可能包括數字以及標點),長度不超過 50124,請你求出最長的連續的公共子串行。

不知道是不是資料改了,導致這個似乎是n^2的演算法也能暴力過去:

#include 

using

namespace

std;

int main()

}maxl = max(maxl, len);

}printf("%d\n", maxl);

return

0;}

不過僅僅滿足於暴力還是不行的……這裡考慮到資料太大,採用了字尾陣列+高度陣列的辦法。不知道雜湊是不是也可以?

順帶一提,string的size()方法返回unsigned int……轉成int後好像會-1,被坑慘了。

#include 

using

namespace

std;

const

int maxn = 100200;

int n, k, ans;

string s, t;

int sa[maxn], rk[maxn], tmp[maxn], lcp[maxn];

bool cmp(int i, int j)

void construct_sa()

for (k = 1; k <= n; k <<= 1)

}void construct_lcp()

}int main()

EOJ 3194 字串消除

給定乙個由大寫字母 a b c 構成的字串s,按如下進行消除過程 1 字串s中連續相同字母組成的子串,如果子串的長度大於1,那麼這些子串會被同時消除,餘下的字元拼成新的字串。例如 abccbcccaa 中 cc ccc 和 aa 會被同時消除,餘下 ab 和 b 拼成新的字串 abb 2 反覆進行上...

201409 3 字串匹配

試題編號 201409 3 試題名稱 字串匹配 時間限制 1.0s 記憶體限制 256.0mb 問題描述 問題描述 給出乙個字串和多行文字,在這些文字中找到字串出現的那些行。你的程式還需支援大小寫敏感選項 當選項開啟時,表示同乙個字母的大寫和小寫看作不同的字元 當選項關閉時,表示同乙個字母的大寫和小...

20140903 字串匹配

問題描述 試題編號 201409 3 試題名稱 字串匹配 時間限制 1.0s 記憶體限制 256.0mb 問題描述 問題描述 給出乙個字串和多行文字,在這些文字中找到字串出現的那些行。你的程式還需支援大小寫敏感選項 當選項開啟時,表示同乙個字母的大寫和小寫看作不同的字元 當選項關閉時,表示同乙個字母...