Pagini recente » Cod sursa (job #1511326) | Cod sursa (job #718973) | Cod sursa (job #1349058) | Cod sursa (job #2383073) | Cod sursa (job #123616)
Cod sursa(job #123616)
#include<stdio.h>
#include<string.h>
char *s,sir[2000005];
long int L,sol,i,lung[2000005],pali[2000005],st,dr,mid;
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]=' ';L=2*L;s[L+1]='*';
for(dr=1;dr<=L;dr++)
{ if(pali[dr])
{ mid=pali[dr];st=2*mid-dr;
if(mid-lung[mid]<=st-lung[st])lung[dr]=lung[st];
else lung[dr]=st+lung[mid]-mid;
}
while(s[dr+lung[dr]+1]==s[dr-lung[dr]-1])
{ lung[dr]++;pali[dr+lung[dr]]=dr;}
sol=sol+(lung[dr]+dr%2)/2;
}
fprintf(g,"%ld\n",sol);
return 0;
}