HDU 3294 Girls' research
2016-10-07 01:24
429 查看
题目地址
manacher
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; }
相关文章推荐
- hdu_3294_Girls' research(Manacher)
- Hdu 3294 Girls' research (manacher 最长回文串)
- hdu 3294 Girls' research
- Girls' research - HDU 3294 (Manacher处理回文串)
- hdu 3294 Girls' research
- HDU 3294 (Manacher) Girls' research
- HDU----(3294)Girls' research(manacher)
- HDU 3294 Girls' research
- HDU 3294 Girls’ research Manacher
- hdu 3294 Girls' research ( manacher+特殊输出格式 )
- HDU - 3294 Girls' research(马拉车算法)
- [manacher] hdu 3294 Girls' research
- hdu 3294 Girls' research(manacher)
- HDU - 3294 Girls' research
- HDU 3294 Girls' research(Manacher算法求回文串左右端点)
- hdu 3294 Girls' research【manacher】
- HDU 3294 Girls' research 【最长回文串+字符周期变换】
- HDU - 3294 Girls' research(manacher)
- HDU 3294 Girls' research (Manacher算法 + 记录区间)
- HDU 3294 Girls' research【最长回文子串】