hdu4513 最小回文单调子串

来源:互联网 发布:美工怎么提升审美观 编辑:程序博客网 时间:2024/05/16 07:49

一开始看到题目就像到了Manacher算法,然后在判断中加了个条件,交上去Wrong了,改了改又交上去还是Wrong,抓狂,只好写了个暴力程序检查,没想到暴力程序居然也Wrong尴尬。只好自己做数据差错,卡了1一个小时总算找到罪恶的根源了,主要是刚刚做完4512,把条件记成严格递增了。。。


ACcode:

#include<cstdio>#include<cstring>const int ns=222222;int n,id,mx,ans;int h[ns],p[ns];int Min(int a1,int a2){    return a1<a2?a1:a2;}int Max(int a1,int a2){    return a1>a2?a1:a2;}int main(){    int T;    scanf("%d",&T);    while (T--)    {        scanf("%d",&n);        n=n+n+2;        h[0]=-2;        h[n]=-3;        for (int i=1;i<n;i++)        {            if (i&1) h[i]=-1;            else scanf("%d",&h[i]);        }        ans=1,mx=id=0;        for (int i=1;i<n-1;i++)        {            p[i]=mx>i?Min(mx-i,p[id+id-i]):1;            while (h[i+p[i]]==h[i-p[i]])            {                if (h[i+p[i]]==-1)  p[i]++;                else if ((i+p[i]-2<i)||(h[i+p[i]]<=h[i+p[i]-2])) p[i]++;                else break;            }            if (p[i]+i>mx) mx=p[i]+i,id=i;            ans=Max(ans,p[i]);        }        printf("%d\n",ans-1);    }    return 0;}


原创粉丝点击