首页 > 代码库 > HDU 3294 Girls' research
HDU 3294 Girls' research
题目地址
manacher
1 #include<cstdio> 2 #include<string.h> 3 #include<algorithm> 4 using namespace std; 5 const int Nmax=200005; 6 char s[Nmax]; 7 char str[Nmax*2+10]; 8 int p[Nmax*2+10]; 9 int hashh[Nmax*2+10];10 int id;11 int maxlen;12 int len;13 int start;14 int endd;15 void init()16 {17 id=0;18 maxlen=0;19 int n=strlen(s);20 str[0]=‘$‘;21 str[1]=‘#‘;22 for(int i=0;i<n;i++)23 {24 str[i*2+2]=s[i];25 hashh[i*2+2]=i;26 str[i*2+3]=‘#‘;27 }28 str[n*2+2]=‘&‘;29 len=n*2+2;30 }31 32 void get()33 {34 for(int i=2;i<len-2;i++)35 {36 if(id+p[id]>i)37 p[i]=min(p[id*2-i],p[id]+id-i);38 else39 p[i]=1;40 while(str[i-p[i]] == str[i+p[i]])41 p[i]++;42 if(p[i]+i>p[id]+id)43 id=i;44 if(p[i]>maxlen)45 {46 maxlen=p[i];47 start=hashh[i-p[i]+2];48 endd=hashh[i+p[i]-2];49 }50 }51 }52 53 int main()54 {55 char c;56 while(scanf("%c",&c)!=EOF)57 {58 //printf("c:%c\n",c);59 getchar();60 scanf("%s",s);61 getchar();62 init();63 get();64 if(maxlen-1>=2)65 {66 printf("%d %d\n",start,endd);67 for(int i=start;i<=endd;i++)68 {69 char k=(s[i]-c+26)%26+‘a‘;70 printf("%c",k);71 }72 printf("\n");73 }74 else75 printf("No solution!\n");76 }77 return 0;78 }
HDU 3294 Girls' research
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。