Pagini recente » Cod sursa (job #2165031) | Cod sursa (job #2672050) | Cod sursa (job #287084) | Cod sursa (job #1168398) | Cod sursa (job #960990)
Cod sursa(job #960990)
#include<fstream>
#include<cstring>
#define NM 1000010
#define M 2000100
using namespace std;
ifstream f("pscpld.in");
ofstream g("pscpld.out");
char s[NM],v[M];
long long i,n,t,st,dr,S,ii,p,d[M];
int main()
{
f>>(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+=2)
S+=(d[i]+1)/2;
for(i=2;i<t;i+=2)
S+=d[i]/2;
g<<S;
return 0;
}