Cod sursa(job #960987)

Utilizator predatorGigi Valoare predator Data 11 iunie 2013 14:37:15
Problema PScPld Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.66 kb
#include<cstdio>
#include<cstring>

#define NM 1000010
using namespace std;
char s[NM],v[2*NM];
long long i,n,t,st,dr,S,ii,p,d[2*NM];
int main()
{
freopen("pscpld.in","r",stdin);
freopen("pscpld.out","w",stdout);
scanf("%s",(s+1));
n=strlen(s+1);
v[0]='!';
for(i=1;i<=n;i++)
{
v[++t]=s[i];
v[++t]=' ';
}
v[t]='#';
for(i=1;i<t;++i)
{
if(i<dr)
{
ii=p-(i-p);
if(d[ii]+i-1<dr)
d[i]=d[ii];
else
{
d[i]=dr-i+1;
st=i-d[i]+1;
st--;dr++;
while(v[st]==v[dr])
{ d[i]++; st--; dr++; }
dr--;
p=i;
}
}
else
{
st=dr=i;
while(v[st]==v[dr])
{ d[i]++; st--; dr++; }
dr--;
p=i;
}
}
for(i=1;i<t;++i)
S+=(d[i]+1)/2;
printf("%lld",S);
return 0;
}