Advertisement
tuki2501

PALINY

Mar 14th, 2020
269
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.35 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define int long long
  5.  
  6. const int N = 100005;
  7. const int base = 311;
  8. const int mod = 1e9 + 7;
  9.  
  10. int p[N], l[N], r[N];
  11. int f[N];
  12.  
  13. int getl(int u, int k) {
  14.     return (l[u] - l[u - k] * p[k] + mod * mod) % mod;
  15. }
  16.  
  17. int getr(int u, int k) {
  18.     return (r[u] - r[u + k] * p[k] + mod * mod) % mod;
  19. }
  20.  
  21. signed main() {
  22.     int n; cin >> n;
  23.     string t; cin >> t;
  24.  
  25.     string s = "@#";
  26.     for (size_t i = 0; i < t.size(); i++) {
  27.         s += t[i]; s += '#';
  28.     }
  29.     s += '$';
  30.     n = s.size();
  31.  
  32.     p[0] = 1;
  33.     for (int i = 1; i < n; i++) {
  34.         p[i] = (p[i - 1] * base) % mod;
  35.     }
  36.  
  37.     l[0] = s[0] - 'a' + 1;
  38.     for (int i = 1; i < n; i++) {
  39.         l[i] = (l[i - 1] * base + s[i] - 'a' + 1) % mod;
  40.     }
  41.  
  42.     r[n - 1] = s[n - 1] - 'a' + 1;
  43.     for (int i = n - 2; i >= 0; i--) {
  44.         r[i] = (r[i + 1] * base + s[i] - 'a' + 1) % mod;
  45.     }
  46.  
  47.     int ans = 1;
  48.     for (int i = 1; i < n - 1; i++) {
  49.         int l = 1, r = min(i, n - i - 1);
  50.         while (l <= r) {
  51.             int m = (l + r) / 2;
  52.             if (getl(i, m) == getr(i, m)) {
  53.                 f[i] = m;
  54.                 l = m + 1;
  55.             }
  56.             else r = m - 1;
  57.         }
  58.         ans = max(ans, f[i]);
  59.     }
  60.     cout << ans << '\n';
  61.  
  62.     for (size_t i = 0; i < s.size(); i++) cout << setw(3) << i; cout << '\n';
  63.     for (size_t i = 0; i < s.size(); i++) cout << setw(3) << s[i]; cout << '\n';
  64.     for (size_t i = 0; i < s.size(); i++) cout << setw(3) << f[i]; cout << '\n';
  65. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement