hdu 3068 最长回文 manacher算法(视频)
感悟: 首先我要Orz一下qsc,我在网上很难找到关于acm的教学视频,但偶然发现了这个,感觉做的很好,链接: 戳戳戳 感觉这种花费自己时间去教别人的人真的很伟大。 manacher算法把所有的回文都变成了奇数形式的,所以判断的时候就很方便了,并且p[i]数组存的是: 以第i个为中心,他的回文半径是多少。 这算法其中还有id和mx,mx是对于一个位置id回文串最长半径是mx。2*id-i是以id为中心关于i对称的那个位置,mx-i是回文串半径长度。 还有qsc推荐的题 POJ 1159 Palindrome HDU 3068 最长回文 POJ 3974 Palindrome HYSBZ 2342 双倍回文 HYSBZ 2565 最长双回文串 代码: #include <bits/stdc++.h> using namespace std; const int maxn = 3e5; char s[maxn],str[maxn]; int len1,len2,p[maxn],ans; void init() { str[0]='$'; str[1]='#'; for (int i=0;i<len1;i++) { str[i*2+2]=s[i]; str[i*2+3]='#'; } len2=len1*2+2; str[len2]='*'; } void manacher() {