Cod sursa(job #2593760)

Utilizator alexdumitrescuDumitrescu George Alex alexdumitrescu Data 4 aprilie 2020 15:33:10
Problema PScPld Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.66 kb
#include <bits/stdc++.h>
#define Nmax 1000005

using namespace std;
ifstream fin ("pscpld.in");
ofstream fout ("pscpld.out");
string s;
char c;
long long rez;
int lg[Nmax], stp, drp;
int main()
{
    while(fin >> c)
    {
        s+='*';
        s+=c;
    }
    s+='*';
    for(int i=0;i<s.size();i++)
    {
        int dr = min(drp, i+lg[stp+drp-i]);
        while(dr<s.size() && 2*i-dr>=0 && s[2*i-dr]==s[dr]) dr++;
        dr--;
        if(dr>drp)
        {
            drp=dr;
            stp=2*i-dr;
        }
        lg[i]=2*(dr-i)+1;
        rez+=lg[i]/4;
        if(s[i]!='*')
            rez++;
    }
    fout << rez;
    return 0;
}