hdu3068马拉车

其实马拉车还真是最好理解的算法(感觉初中的时候好像讲过类似的,但是当时就没有认真听)

没想到一个简单的优化能变成O(n),感觉碉堡

不说了,马拉车裸题,我在写的时候只保留了id,没保留mx,希望能形成一种代码习惯吧

 #include <cstdio>
int n;char ch;
int p[];
char a[];
int min(int a,int b){return(a<b)?a:b;}
int max(int a,int b){return(a>b)?a:b;}
int get(int k){return (k&)?p[k]/*:(p[k]+)/*-;}
void add(int i)
{
int u=i-p[i],v=i+p[i];
while((a[u]==a[v]) && (u>) && (v<=n))
u--,v++,p[i]++;
}
int main()
{
while((ch<'a' || ch>'z')&&(ch!=EOF)) ch=getchar();
while(ch!=EOF)
{
n=;a[]='';
for(;ch>='a' && ch<='z';ch=getchar())
a[++n]=ch,a[++n]='';
int id=;
for(int i=;i<=n;i++)
{
if(i<id+p[id])
{
p[i]=min(p[id*-i],id+p[id]-i);
if(i+p[i]==id+p[id])
add(i);
}
else
p[i]=,add(i);
if(i+p[i]>p[id]+id)
id=i;
}
int ans=;
for(int i=;i<=n;i++)
ans=max(ans,get(i));
printf("%d\n",ans);
while((ch<'a' || ch>'z')&&(ch!=EOF)) ch=getchar();
}
return ;
}
上一篇:Java 基础知识总结 (二、基本数据类型)


下一篇:java – Log4j2:没有可用的log4j-web模块