Advertisement
Guest User

Untitled

a guest
Jan 6th, 2016
332
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.07 KB | None | 0 0
  1. #define filer() freopen("in.txt","r",stdin)
  2. #define filew() freopen("out.txt","w",stdout)
  3. #include<iostream>
  4. #include<stdio.h>
  5. #include<string.h>
  6. #include<math.h>
  7. #include<algorithm>
  8. #include<queue>
  9. #include<stack>
  10. #include<string>
  11. #include<vector>
  12. #include <map>
  13. #define INF 1<<29
  14. #define PI pair<int,int>
  15. #define SET(a, x) memset((a), (x), sizeof(a))
  16. #define pb push_back
  17. #define i64 long long
  18. using namespace std;
  19. typedef vector<int> VI;
  20. //i64 INF=(i64)((i64)1<<(i64)59);
  21.  
  22.  
  23. char s[1000010];
  24.  
  25. string preProcess() {
  26. int n = strlen(s);
  27. if (n == 0) return "^$";
  28. string ret = "^";
  29. for (int i = 0; i < n; i++)
  30. {
  31. ret += "#" ;
  32. ret.pb(s[i]);
  33. }
  34.  
  35. ret += "#$";
  36. return ret;
  37. }
  38.  
  39. int longestPalindrome() {
  40. string T = preProcess();
  41. //cout<<T<<endl;;
  42. int n = T.length();
  43. int *P = new int[n];
  44. int C = 0, R = 0;
  45. for (int i = 1; i < n-1; i++) {
  46. int i_mirror = 2*C-i; // equals to i' = C - (i-C)
  47.  
  48. P[i] = (R > i) ? min(R-i, P[i_mirror]) : 0;
  49.  
  50. // Attempt to expand palindrome centered at i
  51. while (T[i + 1 + P[i]] == T[i - 1 - P[i]])
  52. P[i]++;
  53.  
  54. // If palindrome centered at i expand past R,
  55. // adjust center based on expanded palindrome.
  56. if (i + P[i] > R) {
  57. C = i;
  58. R = i + P[i];
  59. }
  60. }
  61.  
  62. // Find the maximum element in P.
  63. int maxLen = 0;
  64. int centerIndex = 0;
  65. for (int i = 1; i < n-1; i++) {
  66.  
  67. if ((i+P[i])==(n-2) ) {
  68. //return P[i];
  69. maxLen = P[i];
  70. break;
  71. //centerIndex = i;
  72. }
  73. }
  74. delete[] P;
  75. return maxLen;
  76. //return s.substr((centerIndex - 1 - maxLen)/2, maxLen);
  77. }
  78.  
  79.  
  80. int main()
  81. {
  82. //filer();
  83. int T,cas=0,i,j,y,n,m,k,x;
  84. //string S;
  85. scanf("%d",&T);
  86. while(T--)
  87. {
  88. scanf("%s",s);
  89.  
  90. //cin>>S;
  91. //string P=longestPalindrome();
  92. int sz=strlen(s);
  93. int a=longestPalindrome();
  94. int ans=sz+(sz-a);
  95. //int ans=S.length()-P.length();
  96. //ans+=S.length();
  97. printf("Case %d: %d\n",++cas,ans);
  98. }
  99. return 0;
  100. }
  101. /*
  102. Test Case:
  103.  
  104. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement