POJ 2774 字串雜湊 二分

2022-05-29 18:15:18 字數 728 閱讀 4887

題意:給出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...