POJ 3080 字尾陣列 KMP

2022-08-31 03:57:07 字數 1512 閱讀 5255

題意:給定n個dna串,求最長公共子串。如果最長公共子串的長度小於3時輸出no significant commonalities,否則輸出該子串,如有多解請輸出字典序最小的解

思路:是poj 3405的弱化版。思路請參考

#define _crt_secure_no_deprecate#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

typedef

long

long

intll;

const

int maxn = 1000 + 10

;int

wa[maxn], wb[maxn], wv[maxn], ws[maxn];

int cmp(int *r, int a, int b, int

l)void da(int *r, int *sa, int n, int

m)

return;}

intrank[maxn], height[maxn], sa[maxn];

void calheight(int *r, int *sa, int

n)

for (i = 0; i < n; height[rank[i++]] =k)

return;}

int r[maxn], len, n, t, index[maxn], pos[60 + 5

];char str[60 + 5

];bool check(int

x)

else

se.clear();}}

if (se.size() == n)

return

false;}

void

solve()

int l = 1, r = 60, mid, ans = 0

;

while (r >=l)

else

}if (ans <3

)

else

printf("\n

");}

}int

main()

index[len] =i;

r[len++] = val++;

}da(r, sa, len,

100);

calheight(r, sa, len - 1

); solve();

}//#ifdef local_time

//cout << "[finished in " << clock() - start << " ms]" << endl;

//#endif

return0;

}

POJ 3080 字串匹配

題意 給出n個字串,找出其最長公共子串,若子串長度 3,則輸出最長公共子串,否則輸出.本來以為要用到kmp或者字尾陣列什麼的,思考了很久沒有思路,看了一下discuss,發現可以暴力過,而且0ms,也是醉了.include include include include include includ...

poj 3080 字串模擬

字串模擬,因為memcpy的使用錯誤,一直wa,記個教訓,以後不允許再犯沒什麼好說的,幾個字串函式,稍微總結一下strcpy char s,char t 將t賦值給s,包括結束符 0 strncpy char s,char t,int len 將從t開始的len個位元組,賦值給sstrstr cha...

poj2406 kmp,字尾陣列

開始是用字尾陣列做的,rmq果斷超了記憶體,全部改用unsigned short結果又超時,後來參考了 裡的方法。關鍵思想是設k為最小重複字串的長度,則s 0,1 n k 1 s k,k 1 n 1 即lcp rank 0 rank k n k 由於0位置是固定的,只需要對名次迴圈求出最小的k就行!...