Cod sursa(job #2593960)

Utilizator alexdumitrescuDumitrescu George Alex alexdumitrescu Data 5 aprilie 2020 00:22:11
Problema PScPld Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.63 kb
#include <bits/stdc++.h>
#define Nmax 1000005
using namespace std;
ifstream fin ("pscpld.in");
ofstream fout ("pscpld.out");
char c;
string s;
int lg[Nmax], st, dr;
long long rez;
int main()
{
    while(fin >> c)
    {
        s+='*';
        s+=c;
    }
    s+='*';
    for(int i=0;i<s.size();i++)
    {
        int k=1;
        if(i<=dr)
            k=min(dr-i+1, lg[st+dr-i]);
        while(i+k<s.size() && i-k>=0 && s[i+k]==s[i-k]) k++;

        lg[i]=k;
        k--;
        if(i+k>dr)
        {
            dr=i+k;
            st=i-k;
        }
        rez+=lg[i]/2;
    }
    fout << rez;
    return 0;
}