Cod sursa(job #2548343)

Utilizator adiaioanaAdia R. adiaioana Data 16 februarie 2020 15:46:21
Problema PScPld Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.63 kb
#include <fstream>
#include <string>
using namespace std;
ifstream cin("pscpld.in");
ofstream cout("pscpld.out");
int n,ex[2000100],c,r,lg;
long long ans;
char ch;
string str;
int main()
{
    str+='#';
    while(cin>>ch)
    {
        str+=ch;
        str+='#';
    }
    ex[0]=1;
    c=0;
    r=0;
    for(int i=1; i<str.size(); ++i)
    {
        lg=1;
        if(i<=r)
            lg=min(ex[2*c-i],r-i+1);
        while(i-lg>=0 && i+lg<str.size() && str[i+lg]==str[i-lg]) ++lg;

        if(i+lg-1>r)
            r=i+lg-1, c=i;
        ex[i]=lg;
        ans+=ex[i]/2;
    }
    cout<<ans<<'\n';
    return 0;
}