Pagini recente » Cod sursa (job #2398695) | Cod sursa (job #940552) | Cod sursa (job #2607859) | Cod sursa (job #820023) | Cod sursa (job #123610)
Cod sursa(job #123610)
#include<stdio.h>
#include<string.h>
char *s,sir[2000005];
long int L,sol,i,lung[2000005],st,dr,maxa,maxg,l1,l2,l3;
int main()
{
FILE *f,*g;f=fopen("pscpld.in","r");g=fopen("pscpld.out","w");
sir[0]='#';
s=&sir[1];fscanf(f,"%s",s);
L=strlen(s);
for(i=L-1;i>=0;i--){ s[2*i+2]=' ';s[2*i+1]=s[i];}
s[0]=' ';
maxg=2;
L=2*L;s[L+1]='*';
for(i=1;i<L;i++)
{
while(s[i+lung[i]+1]==s[i-lung[i]-1])lung[i]++;
maxa=i+lung[i];
if(maxa>maxg)
{ for(dr=maxg+1;dr<=maxa;dr++)
{ st=2*i-dr;
l1=lung[st];l2=lung[dr];l3=st+lung[i]-i;
l1=(l1<l3)?l1:l3;
lung[dr]=(l1>l2)?l1:l2;
}
maxg=maxa;
}
sol=sol+(lung[i]+i%2)/2;
}
fprintf(g,"%ld\n",sol);
return 0;
}