mle了...囧,不過演算法是正確的
#define maxn 2000010
int wa[maxn],wb[maxn],wv[maxn],wss[maxn];
int r[maxn],sa[maxn];
int cmp(int *r,int a,int b,int l)
void da(int *r,int *sa,int n,int m)
r[n] = 0;
da(r,sa,n+1,199);
calheight(r,sa,n);
init_rmq(n);
int ans=0;
for(i=0;i字尾陣列雖然強大,但是缺點就是常數大,空間大,就像這題。。。改用擴充套件kmp就明顯不同,空間、時間都有明顯改進,思路參考這裡 複雜度為o(nlgn)
#define n 1100100
int b[n];
void ex_kmp(char *s,char *t,int ls,int lt,int *a)s[n-i-1] = '\0';
ex_kmp(s,t,n,n-mid,a1);
///for(i=0;i=mid-i)
}for(i=mid;i=i-mid)
}dfs(str,mid);
dfs(str+mid,n-mid);
}int main()
return 0;
}
URAL 1297 字尾陣列 求最長回文子串
思路 這題下午搞了然後一直wa,後面就看了discuss,裡面有個陣列 abcdefdcba,這個我輸出abcd,所以錯了。然後才知道自己寫的字尾陣列對這個回文子串有bug,然後就不知道怎麼改了。然後看題解,裡面都是用rmq先預處理任意兩個字尾的最長公共字首,因為不太知道這個,所以又看了一下午,嘛嘛...
字尾陣列求最長公共子串 POJ 2774
根據羅的 兩個串的中間要加乙個ascii碼比任何字母都小的字元 最長公共子串 pku2774,ural1517 給定兩個字串a 和b,求最長公共子串。演算法分析 字串的任何乙個子串都是這個字串的某個字尾的字首。求a 和b 的最長公共子串等價於求a 的字尾和b 的字尾的最長公共字首的最大值。如果列舉a...
求最長回文子串
求最長回文子串,大概有以下幾種方法 1 錯誤!先翻轉再求最長公共子串 例如 abcdafdcba abcd x 即原串中包含翻轉串的子串時 2 暴力 遍歷每個字串,然後判斷是否是回文子串並記錄最長資訊 時間複雜度o n 3 3 動態規劃 時間複雜度o n 2 空間複雜度o n 2 dp i j 表示...