fork(2) download
  1. #include <bits/stdc++.h>
  2. #include <ext/algorithm>
  3. #include <ext/numeric>
  4.  
  5. using namespace std;
  6. using namespace __gnu_cxx;
  7.  
  8. #define endl '\n'
  9.  
  10. vector<int> manacher(const string &s)
  11. {
  12. int n = 2 * s.length();
  13. vector<int> rad(n);
  14.  
  15. for (int i = 0, j = 0, k; i < n; i += k, j = max(j - k, 0))
  16. {
  17. for( ; i >= j && i + j + 1 < n
  18. && s[(i - j) / 2] == s[(i + j + 1) / 2]; ++j);
  19.  
  20. rad[i] = j;
  21.  
  22. for (k = 1; i >= k && rad[i] >= k
  23. && rad[i - k] != rad[i] - k; ++k)
  24. rad[i + k] = min(rad[i - k], rad[i] - k);
  25. }
  26.  
  27. return rad;
  28. }
  29.  
  30. int main()
  31. {
  32. ios_base::sync_with_stdio(0);
  33. cin.tie(0);
  34.  
  35. int n;
  36. string s;
  37. cin >> n >> s;
  38.  
  39. auto rad = manacher(s);
  40. cout << *max_element(rad.begin(), rad.end()) << endl;
  41.  
  42. return 0;
  43. }
  44.  
Success #stdin #stdout 0s 3232KB
stdin
5
ababa
stdout
5