Advertisement
Guest User

Untitled

a guest
Jan 26th, 2013
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.46 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <algorithm>
  4. #include <vector>
  5. #include <cstring>
  6. using namespace std;
  7. typedef long long ll;
  8. #define pb push_back
  9. const int N = 2e5 + 5;
  10. vector <int> beg[N];
  11. int n, z[N];
  12. char tt[N];
  13. string s;
  14. void read() {scanf("%s", tt);}
  15. ll solve100()
  16. {
  17.   n = strlen(tt);
  18.   s = " ";
  19.   for (int i = 0; i < n; ++i)
  20.   {
  21.     s += tt[i];
  22.     s += " ";
  23.   }
  24.   int leng = s.size();
  25.   for (int i = 0, l = 0, r = -1; i < leng; ++i)
  26.   {
  27.     int tmp;
  28.     if (i <= r) tmp = min(r - i + 1, z[r - i + l]);
  29.     else tmp = 0;
  30.     while (i - tmp >= 0 && i + tmp < leng && s[i - tmp] == s[i + tmp]) ++tmp;
  31.     z[i] = tmp;
  32.     if (i + tmp - 1 > r)
  33.     {
  34.       l = i - tmp + 1;
  35.       r = i + tmp - 1;
  36.     }
  37.   }
  38.   ll ret = 0;
  39.   for (int i = 1; i + 1 < leng; ++i)
  40.   {
  41.     int len = z[i] - 1, bg = (i - 1) / 2;
  42.     if (i % 2)
  43.     {
  44.       ret += len / 2;
  45.       beg[bg - len / 2].pb(bg + len / 2);
  46.     } else
  47.     {
  48.       if (z[i] == 1) continue;
  49.       ret += len / 2 - 1;
  50.       beg[bg - len / 2 + 1].pb(bg + len / 2);
  51.     }
  52.   }
  53.   int mxend = -1;
  54.   for (int i = 0; i < n; ++i)
  55.   {
  56.     reverse(beg[i].begin(), beg[i].end());
  57.     for (int j = 0; j < beg[i].size(); ++j)
  58.     {
  59.       if (mxend >= beg[i][j]) ++ret;
  60.       mxend = max(mxend, beg[i][j]);
  61.     }
  62.   }
  63.   return ret;
  64. }
  65.  
  66. int main()
  67. {
  68.   freopen("tesseract.in", "r", stdin);
  69.   freopen("tesseract.out", "w", stdout);
  70.   read();
  71.   cout << solve100() << endl;
  72.   return 0;
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement