Cod sursa(job #2345305)

Utilizator PetyAlexandru Peticaru Pety Data 16 februarie 2019 10:25:20
Problema PScPld Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin ("pscpld.in");
ofstream fout ("pscpld.out");

const int NMAX = 2e6;

int st, dr, len;
long long sol;
string s, s1;
int dp[2000002];

int main()
{
  fin >> s1;
  for (int i = 0; i < s1.size(); i++) {
    s += s1[i];
    s += '#';
  }
  s += '#';
  for(int i = 0; i < s.size(); i++) {
    if(i > dr)
      len = 0;
    else
      len = min(dr - i, dp[st + dr - i]);
    while(i + len < s.size() && i >= len && s[i - len] == s[i + len])
      len++;
    dp[i] = len;
    len--;
    if(i + len > dr) {
      st = i - len;
      dr = i + len;
    }
  }
  sol = (s.size() - 1) / 2;
  for(int i = 0; i < s.size(); i++)
    sol += dp[i] - 1;
  fout << sol / 2;
  return 0;
}