Cod sursa(job #963599)

Utilizator misinozzz zzz misino Data 17 iunie 2013 21:04:48
Problema PScPld Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include<fstream>
#include<cstring>
using namespace std;
ifstream f("pscpld.in");
ofstream g("pscpld.out");
long long sol,i,n,nr,dr,st,p,c,d[2000100];
char v[2000100],s[1000100];
int main()
{
    f>>(s+1);
    v[0]='!';
    n=strlen(s+1);
    for(i=1;i<=n;++i)
    {
        v[++nr]=s[i];
        v[++nr]=' ';
    }
    v[nr]=')';
    n=nr-1;
    for(i=1;i<=n;++i)
    {
        if(i<dr)
        {
            p=c-(i-c);
            if(d[p]+i-1<dr)
            d[i]=d[p];
            else
            {
                d[i]=dr-i+1;
                st=i-d[i];
                ++dr;
                while(v[st]==v[dr])
                {
                    ++dr;
                    --st;
                    ++d[i];
                }
                --dr;
                c=i;
            }
        }
        else
        {
            st=dr=i;
            while(v[st]==v[dr])
            {
                ++d[i];
                --st;
                ++dr;
            }
            --dr;
            c=i;
        }
    }
    for(i=1;i<=n;i+=2)
    sol+=(d[i]+1)/2;
    for(i=2;i<=n;i+=2)
    sol+=d[i]/2;
    g<<sol<<'\n';
    return 0;
}