Pagini recente » Cod sursa (job #447238) | Cod sursa (job #198952) | Cod sursa (job #1637027) | Cod sursa (job #3294730) | Cod sursa (job #123246)
Cod sursa(job #123246)
#include<stdio.h>
#include<string.h>
char *s,sir[1000005];
long int i,lung[2000005],ls,l,r,sol;
int main()
{
FILE *f,*g;f=fopen("pscpld.in","r");g=fopen("pscpld.out","w");
s=&sir[0];fscanf(f,"%s",s);ls=strlen(s);
for(i=0;i<ls;i++)
{ if(lung[2*i+1])sol=sol+(lung[2*i+1]+1)/2;
else
{ lung[2*i+1]=1;l=i;r=i;
while(l-1>=0&&r+1<ls&&s[l-1]==s[r+1])
{ lung[2*i+1]+=2;l--;r++;lung[2*r+1]=lung[2*l+1];}
sol=sol+(lung[2*i+1]+1)/2;
}
}
for(i=1;i<ls;i++)
{ if(lung[2*i])sol=sol+lung[2*i]/2;
else
{ l=i-1;r=i;
if(s[l]==s[r])
{ lung[2*i]=2;
while(l-1>=0&&r+1<ls&&s[l-1]==s[r+1])
{ lung[2*i]+=2;l--;r++;lung[2*r]=lung[2*l];}
sol=sol+lung[2*i]/2;
}
}
}
fprintf(g,"%ld\n",sol);
return 0;
}