Cod sursa(job #123265)

Utilizator anna_bozianuBozianu Ana anna_bozianu Data 15 ianuarie 2008 10:24:36
Problema PScPld Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.62 kb
#include<stdio.h>
#include<string.h>
char *s,sir[2000005];
long int i,lung[2000005],ll,pc,sol,emax,e;
int main()
{
	FILE *f,*g;f=fopen("pscpld.in","r");g=fopen("pscpld.out","w");
	s=&sir[0];fscanf(f,"%s",s);
	ll=strlen(s);
	for(i=ll-1;i>=0;i--){s[2*i+1]=s[i];s[2*i+2]=' ';}s[0]=' ';ll=ll*2;
	pc=1;
	do
	{  emax=(pc<ll-pc)?pc:(ll-pc);
	   for(e=1;e<=emax;e++)
	   if(s[pc-e]!=s[pc+e])break;
	   e--;
	   if(e){lung[pc]=e;for(i=1;i<=(e-1)/2;i++)lung[pc+i]=lung[pc-i];pc=pc+(e-1)/2+1;}
           else pc++;
	}
	while(pc<ll);
	for(i=1;i<ll;i++)
	 sol=sol+(lung[i]+i%2)/2;
	fprintf(g,"%ld\n",sol);
	return 0;
}