Advertisement
Guest User

Untitled

a guest
Jul 24th, 2019
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.91 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define int long long
  6.  
  7. #define nDBG
  8.  
  9. vector <int> get1(string s){
  10.     int n = s.size();
  11.     vector <int> f(n, 1);
  12.     int L = 0, R = 0;
  13.     for(int i = 1; i < n; ++i){
  14.         if(i <= R) f[i] = min(R-i , f[L + R - i]) + 1;
  15.         while(i + f[i] - 1 < n && i - f[i] + 1 >= 0 && s[i + f[i] -1] == s[i - f[i] + 1]) f[i]++;
  16.         f[i]--;
  17.         if(i + f[i] - 1 > R){
  18.             R = i + f[i] - 1;
  19.             L = i - f[i] + 1;
  20.         }
  21.     }
  22.     return f;
  23. }
  24.  
  25. signed main()
  26. {
  27.     string s;
  28.     cin >> s;
  29.     string ns = "#";
  30.     for(int i = 0; i < s.size(); ++i){
  31.         ns += s[i];
  32.         ns += '#';
  33.     }
  34.     vector <int> f = get1(ns);
  35. #ifdef DBG
  36.     cout << ns << "\n";
  37.     for(auto i : f) cout << i << " ";
  38.     cout << "\n";
  39. #endif
  40.     int ans = 0;
  41.     for(auto i : f) ans += i;
  42.     cout << (ans - s.size()*3 - 1)/2;
  43.     return 0;
  44. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement