标签:
题解:
manacher基础算法上加个判定条件:即向两边延伸的大小限制
#include<iostream> #include<cstring> #include<cstdio> #include<cmath> #include<algorithm> using namespace std; const int N = 2e6+10, M = 2e2+11, inf = 2e9, mod = 1e9+7; int p[N],a[N],n; int manacher(int l) { int mx = 0, id = 0; memset(p,0,sizeof(p)); for(int i=1;i<l;i++) { if(p[id]+id>i)p[i]=min(p[2*id-i],p[id]+id-i); else p[i]=1; while(a[i-p[i]] == a[i+p[i]]&&a[i-p[i]] <= a[i-p[i]+2])++p[i]; if(id+p[id]<i+p[i])id=i; if(mx<p[i])mx=p[i]; } return mx-1; } int main() { int T; scanf("%d",&T); while(T--) { scanf("%d",&n); a[0]=-1; for(int i=1;i<=n;i++) { a[i*2-1]=0; scanf("%d",&a[i*2]); } a[2*n+1]=0; printf("%d\n",manacher(2*n+1)); } return 0; }
HDU 4513 吉哥系列故事——完美队形II manacher
标签:
原文地址:http://www.cnblogs.com/zxhl/p/5657197.html