标签:des style blog http color os io java ar
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)
Total Submission(s): 537 Accepted Submission(s): 199
1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 #define maxn 400050 5 char str[maxn]; 6 int rad[maxn]; 7 int Min(int a,int b){ 8 return a<b?a:b; 9 } 10 void init(int len,char s[]){ 11 memset(rad,0,sizeof(int)*(2*len+2)); 12 s[len*2+2]=‘\0‘; 13 int i,j=1; 14 for(i=len*2+1;i>0;i--){ 15 if(i&1) s[i]=‘#‘; 16 else{ s[i]=s[len-j]; 17 j++; 18 } 19 } 20 s[0]=‘$‘; //防止溢出 21 } 22 int manacher(int len){ 23 int id,i,ans=0; 24 for(i=1;i<len*2+1;i++){ 25 if(id+rad[id]>i) rad[i]=Min(rad[id*2-i],id+rad[id]-i); 26 while(str[i-rad[i]]==str[i+rad[i]]) rad[i]++; 27 if(i+rad[i]>id+rad[id]) id=i; 28 if(ans<rad[i])ans=rad[i]; 29 } 30 return ans; 31 } 32 int main(){ 33 char sav[2]; 34 int len,i; 35 //system("call test.in"); 36 //freopen("test.in","r",stdin); 37 // fclose(stdin); 38 while(scanf("%s%s",sav,str)!=EOF){ 39 len=strlen(str); 40 init(len,str); 41 int ans=manacher(len); 42 if(ans<=2)puts("No solution!"); 43 else{ 44 for(i=1;i<len*2+1;i++) 45 if(ans==rad[i]) break; 46 int st,en; 47 st=(i-ans)/2; 48 en=st+ans-2; 49 printf("%d %d\n",st,en); 50 for(int j=(st+1)*2;j<(st+ans)*2;j+=2){ 51 if(str[j]-(sav[0]-‘a‘)<‘a‘) 52 printf("%c",str[j]+(‘z‘-sav[0]+1)); 53 else 54 printf("%c",str[j]-(sav[0]-‘a‘)); 55 } 56 puts(""); 57 } 58 } 59 return 0; 60 }
HDU----(3294)Girls' research(manacher)
标签:des style blog http color os io java ar
原文地址:http://www.cnblogs.com/gongxijun/p/3962598.html