题目链接:http://poj.org/problem?id=3974
题意:求出给定字符串的最长回文串长度。
思路:裸的Manacher模板题。
#include#include #include #include #include #include using namespace std; const int MAXN=1000000+5;typedef long long int LL;#define INF 0x3f3f3f3fchar str[MAXN],dstr[MAXN*3]; int lenstr,lendstr,p[MAXN*3],ans;void manacher(){ memset(p,0,sizeof(p)); int id=0,mx=0; for(int i=1;i i){ p[i]=min(p[2*id-i],mx-i); } else{ p[i]=1; } while(dstr[i-p[i]]==dstr[i+p[i]]){ p[i]++; } if(p[i]+i>mx){ mx=p[i]+i; id=i; } }}void init(){ dstr[0]='$'; dstr[1]='#'; for(int i=0;i