fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define ll long long int
  4. #define MAX 100005
  5.  
  6. int z[MAX];
  7. string str,re;
  8.  
  9. void Zfun()
  10. {
  11. memset(z,0,sizeof(z));
  12. reverse(re.begin(),re.end());
  13. int len=str.length();
  14. int l=0,r=0;
  15. for(int i=0;i<=len-1;i++)
  16. {
  17. if(i<=r){
  18. z[i]=min(r-i+1,z[i-l]);
  19. }
  20. while(i+z[i]<len and re[z[i]]==str[i+z[i]]){
  21. ++z[i];
  22. }
  23. if(i+z[i]-1>r){
  24. l=i,r=i+z[i]-1;
  25. }
  26. }
  27. }
  28.  
  29. char temp[MAX];
  30.  
  31. int main()
  32. {
  33. int t,pos;
  34. while(scanf("%s",temp) != EOF)
  35. {
  36. str=temp;
  37. re=str;
  38. Zfun();
  39. int len=str.length();
  40. for(int i=0;i<=len-1;i++)
  41. {
  42. if(i+z[i]==len)
  43. {
  44. pos=i-1;
  45. break;
  46. }
  47. }
  48. printf("%s",temp);
  49. for(int i=pos;i>=0;--i)
  50. {
  51. printf("%c",str[i]);
  52. }
  53. printf("\n");
  54. }
  55.  
  56.  
  57. return 0;
  58. }
  59.  
  60.  
Success #stdin #stdout 0s 3960KB
stdin
aba
stdout
aba