Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define int long long
- #define nDBG
- vector <int> get1(string s){
- int n = s.size();
- vector <int> f(n, 1);
- int L = 0, R = 0;
- for(int i = 1; i < n; ++i){
- if(i <= R) f[i] = min(R-i , f[L + R - i]) + 1;
- while(i + f[i] - 1 < n && i - f[i] + 1 >= 0 && s[i + f[i] -1] == s[i - f[i] + 1]) f[i]++;
- f[i]--;
- if(i + f[i] - 1 > R){
- R = i + f[i] - 1;
- L = i - f[i] + 1;
- }
- }
- return f;
- }
- signed main()
- {
- string s;
- cin >> s;
- string ns = "#";
- for(int i = 0; i < s.size(); ++i){
- ns += s[i];
- ns += '#';
- }
- vector <int> f = get1(ns);
- #ifdef DBG
- cout << ns << "\n";
- for(auto i : f) cout << i << " ";
- cout << "\n";
- #endif
- int ans = 0;
- for(auto i : f) ans += i;
- cout << (ans - s.size()*3 - 1)/2;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement