您的位置:首页 > 其它

HDU 3294 Girls' research

2016-10-07 01:24 429 查看
题目地址

manacher

#include<cstdio>
#include<string.h>
#include<algorithm>
using namespace std;
const int Nmax=200005;
char s[Nmax];
char str[Nmax*2+10];
int p[Nmax*2+10];
int hashh[Nmax*2+10];
int id;
int maxlen;
int len;
int start;
int endd;
void init()
{
id=0;
maxlen=0;
int n=strlen(s);
str[0]='$';
str[1]='#';
for(int i=0;i<n;i++)
{
str[i*2+2]=s[i];
hashh[i*2+2]=i;
str[i*2+3]='#';
}
str[n*2+2]='&';
len=n*2+2;
}

void get()
{
for(int i=2;i<len-2;i++)
{
if(id+p[id]>i)
p[i]=min(p[id*2-i],p[id]+id-i);
else
p[i]=1;
while(str[i-p[i]] == str[i+p[i]])
p[i]++;
if(p[i]+i>p[id]+id)
id=i;
if(p[i]>maxlen)
{
maxlen=p[i];
start=hashh[i-p[i]+2];
endd=hashh[i+p[i]-2];
}
}
}

int main()
{
char c;
while(scanf("%c",&c)!=EOF)
{
//printf("c:%c\n",c);
getchar();
scanf("%s",s);
getchar();
init();
get();
if(maxlen-1>=2)
{
printf("%d %d\n",start,endd);
for(int i=start;i<=endd;i++)
{
char k=(s[i]-c+26)%26+'a';
printf("%c",k);
}
printf("\n");
}
else
printf("No solution!\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: