poj 2774
題意:求兩個字串的最長公共子串。
總結:搞了半天還是不太理解,看著大神部落格強行敲的。。而且還看到有hash+二分做的。
//poj-2774
#include#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
#pragma comment(linker, "/stack:102400000,102400000")
#define f(i,a,b) for (int i=a;i#define ff(i,a,b) for (int i=a;i<=b;i++)
#define mes(a,b) memset(a,b,sizeof(a))
#define inf 0x3f3f3f3ftypedef
long
long
ll;const
int n = 3e5+10
;char
str[n], str1[n];
//這些應該可以做模板了。。
intwa[n], wb[n], wsf[n], wv[n], sa[n];
intrankn[n], height[n], s[n];
int cmp(int *r, int a, int b, int
k)void getsa(int *r, int *sa, int n, intm)}
void getheight(int *r, intn)}
intmain()
printf(
"%d\n
", maxn);
}return0;
}
poj 2774 字尾陣列
include include define debug ifdef debug define debug printf va args else define debug endif define maxn 200004 define min a,b a b a b int wx maxn wy ...
POJ 2774 字尾陣列
題意 求兩個串的最長公共子串 思路 在求出height陣列之後,再把sa陣列區分出來,只要其中乙個sa i s i 1 陣列是屬於第一串,s i 1 s i 屬於第二串,那麼我們可以求得其最大值,之所以可以這樣做,是因為sa陣列已經對字串按字典序排好序了 include include includ...
poj 2774 字尾陣列模板
求兩個字串的最長公共子串。將兩個字串連線為乙個新字串,並計算字尾陣列和高度陣列lcp。然後檢查字尾陣列中所有相鄰的字尾,其中字尾分別屬於第一和第二個字串的lcp的最大值就是答案。include include include include include include include inclu...