Cod sursa(job #1980550)

Utilizator Bodo171Bogdan Pop Bodo171 Data 13 mai 2017 13:23:12
Problema PScPld Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.7 kb
#include <iostream>
#include <fstream>
using namespace std;
int p[2000005],sum[2000005];
string orig;
char s[2000005];
int i,n,c,r;
long long tot;
int main()
{
    ifstream f("pscpld.in");
    ofstream g("pscpld.out");
    f>>orig;
    for(i=0;i<orig.size();i++)
    {
        s[++n]='*';
        sum[n]=sum[n-1];
        s[++n]=orig[i];
        sum[n]=sum[n-1]+1;
    }
    s[0]=',';
    for(i=1;i<=n;i++)
    {
        if(i<=r)
          p[i]=min(p[c*2-i],r-i);
        while(i-p[i]>=0&&i+p[i]<=n&&s[i-p[i]]==s[i+p[i]])
            p[i]++;
        p[i]--;
        if(i+p[i]>r)
            c=i,r=i+p[i];
        tot+=1LL*(sum[i+p[i]]-sum[i-1]);
    }
    g<<tot;
    return 0;
}