Cod sursa(job #123246)

Utilizator anna_bozianuBozianu Ana anna_bozianu Data 15 ianuarie 2008 09:16:01
Problema PScPld Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.77 kb
#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;
}