Advertisement
NHumme

KEK2

Oct 29th, 2018
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.18 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. long long P = 257, M = 1e9 + 1;
  6. long long h1[1000001], h2[1000001], p[1000001], p2[1000001];
  7. string s1, s2;
  8.  
  9. long long sub_hash(int l, int r)
  10. {
  11.     return (h1[r] - h1[l] * p[r - l] + M * M) % M;
  12. }
  13.  
  14. long long sub_hash2(int l, int r)
  15. {
  16.     return (h2[r] - h2[l] * p2[r - l] + M * M) % M;
  17. }
  18.  
  19. int main()
  20. {
  21.     int i, k, n, m, l, r, d;
  22.     cin >> n;
  23.     cin >> s1;
  24.     n--;
  25.     s2 = s1;
  26.     for (i = 0; i <= n / 2; i++)
  27.         swap(s2[i], s2[n - i]);
  28.     p[0] = 1;
  29.     for (i = 1; i <= n; i++)
  30.     {
  31.         h1[i] = (h1[i - 1] * P + s1[i - 1] - 'a') % M;
  32.         p[i] = (p[i - 1] * P) % M;
  33.     }
  34.     p2[0] = 1;
  35.     for (i = 1; i <= n; i++)
  36.     {
  37.         h2[i] = (h2[i - 1] * P + s2[i - 1] - 'a') % M;
  38.         p2[i] = (p2[i - 1] * P) % M;
  39.     }
  40.     k = 0;
  41.     for (i = 0; i <= n; i++)
  42.     {
  43.         if (sub_hash(i, n) == sub_hash2(0, n - i))
  44.         {
  45.             k = n - i + 1;
  46.             break;
  47.         }
  48.     }
  49.     for (i = n; i >= 0; i--)
  50.     {
  51.         if (sub_hash(0, i) == sub_hash2(n - i, n) && i >= k)
  52.         {
  53.             k = i + 1;
  54.             break;
  55.         }
  56.     }
  57.     cout << k;
  58.     return 0;
  59. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement