題意:給定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就行!...