Pagini recente » Cod sursa (job #1182211) | Cod sursa (job #333144) | Cod sursa (job #1394387) | Cod sursa (job #1620361) | Cod sursa (job #2152401)
#include <bits/stdc++.h>
#define MaxN 1000005
#define INF 2140000000
#define MOD 666013
using namespace std;
FILE *IN=fopen("pscpld.in","r"),*OUT=fopen("pscpld.out","w");
int N,v[2*MaxN],Man[2*MaxN];
long long Ans;
char str[MaxN];
int main()
{
fscanf(IN,"%s",str+1);
int N=strlen(str+1);
for(int i=1;i<=N;i++)
v[2*i-1]=str[i]-'a'+1;
Man[0]=1;
Man[1]=3;
int M=1;
Ans=1;
for(int i=2;i<=2*N;i++)
{
if(M+(Man[M]-1)/2<=i+(Man[2*M-i]-1)/2)
{
Man[i]=max(1,min(Man[2*M-i],Man[M]-2*(i-M)));
M=i;
int P=(Man[M]+1)/2;
while(M+P<=2*N&&M-P>=0)
{
if(v[M+P]==v[M-P])
P++,Man[i]+=2;
else break;
}
}
else Man[i]=Man[2*M-i];
if(i%2)
Ans+=(Man[i]+1)/4;
else Ans+=(Man[i]-1)/4;
}
fprintf(OUT,"%lld",Ans);
return 0;
}