Cod sursa(job #2345303)

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

using namespace std;

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

const int NMAX = 2e6;

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

int main()
{
  while(fin >> ch) {
    s.push_back('#');
    s.push_back(ch);
  }
  s.push_back('#');
  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 - lg;
      dr = i + lg;
    }
  }
  sol = (s.size() - 1) / 2;
  for(int i = 0; i < s.size(); i++)
    sol += dp[i] - 1;
  fout << sol / 2;
  return 0;
}