題意:給出s,t兩個字串,求最長公共子串的長度
思路:首先二分答案x,預處理出s中長度為x的子串雜湊值並排序,在t中列舉起點,二分查詢t[i...i+x]的雜湊值
二分查詢直接用binary_search()函式
複雜度其實是nlog方
1 #include2 #include3 #include4 #include5#define ll long long
6#define ull unsigned long long
7#define debug(x) cout << "[" << x << "]" << endl
8using
namespace
std;910
const
int mx = 1e5+10;11
const
intbase = 131;12
char
s[mx], t[mx];
13ull hs[mx], ht[mx], a[mx], p[mx];
14int
n, m;
1516
bool check(int
x)25
return1;
26}2728
intmain()
41 printf("
%d\n
", r);
42return0;
43 }
poj2774(字尾陣列 字串hash)
求兩個串的最長公共子串 將兩個串連起來,求字尾陣列,sa中相鄰兩個字尾如果不屬於同乙個模版,則用這個height更新答案,他們的最長公共字首更新答案 include include include include include include define max x,y x y x y usin...
poj 2774 木材加工 dp 二分答案 貪心
poj 2774 木材加工 dp 二分答案 貪心 time limit 1000ms memory limit 65536kb description 木材廠有一些原木,現在想把這些木頭切割成一些長度相同的小段木頭,需要得到的小段的數目是給定了。當然,我們希望得到的小段越長越好,你的任務是計算能夠得...
HDU 4080 字串雜湊 二分
找到乙個字串中出現超過m次的最長的子串,以及該子串最有出現的起點。如果有多個相同的就選擇最右端出現的。二分長度,然後雜湊統計子串出現次數。include using namespace std typedef unsigned long long ull const ull seed 229 con...