Cod sursa(job #2955412)

Utilizator doruliqueDoru MODRISAN dorulique Data 16 decembrie 2022 22:22:13
Problema PScPld Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <iostream>
#include <fstream>
using namespace std;

ifstream fin("pscpld.in");
ofstream fout("pscpld.out");
char q[1000001],s[2100000];
int p[2100000];
int main()
{
    s[0]=253;
    s[1]=254;
    int i=0,j=2,l,r;
    fin.getline(q,1000001);
    for(i=0; q[i]; i++)
        s[j++]=q[i],s[j++]=254;
    s[j]=0;
    p[1]=0;
    l=r=1;
    for(i=2; i<j; i++)
    {
        if(i>r)
            p[i]=0;
        else
            p[i]=min(p[l+r-i],r-i);
        while(s[i-p[i]]==s[i+p[i]])
            p[i]++;
        p[i]--;
        if(i+p[i]>r)r=i+p[i],l=i-p[i];
    }
    /**cout<<s<<"\n";
    for(i=0;i<j;i++)cout<<p[i];

    cout<<"\n";
    */
    long long sum=0;
    for(i=0;i<j;i++)
        if(i%2)sum+=p[i]/2;
        else sum+=(p[i]+1)/2;
    fout<<sum<<"\n";
    return 0;
}