Cod sursa(job #6166)

Utilizator Binary_FireFlorin Pogocsan Binary_Fire Data 17 ianuarie 2007 22:18:05
Problema PScPld Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include<stdio.h>
#define Fin "pscpld.in"
#define Fout "pscpld.out"
#define NMAX 1000000
long s[NMAX],lung[NMAX],nr_pal[NMAX],sol;
FILE *in,*out;

int main()
{long i,j,st,dr,k=0;
 char c;
  in=fopen(Fin,"r"); out=fopen(Fout,"w");
  c=fgetc(in);
  while (c!=EOF && c!='\n')
  { s[0]++;
    s[s[0]]=(long)c; 
    s[0]++;
    c=fgetc(in); }
  for (i=1;i<=s[0];i++)
  //fprintf(out,"i:%ld | lung[i]:%ld\n",i,lung[i]);
    for (st=i-lung[i],dr=i+lung[i];st>0 && dr<=s[0] && s[st]==s[dr];st--,dr++) 
    { if (s[st]!=0) nr_pal[i]++;
      lung[i]++; 
      lung[dr]=lung[st]; 
      nr_pal[dr]=nr_pal[st]; }
   
   for (j=1;j<=s[0];j++) {

	  sol+=nr_pal[j];

   }

  fprintf(out,"%ld\n",sol); 
   
   //fprintf(out,"\n"); 
   //for (j=1;j<=s[0];j++) fprintf(out,"%c ",s[j]);
   //fprintf(out,"\n");
   //for (j=1;j<=s[0];j++) fprintf(out,"%ld ",lung[j]);
   //fprintf(out,"\n");
   //for (j=1;j<=s[0];j++) fprintf(out,"%ld ",nr_pal[j]); 
   //fprintf(out,"\n\n"); }
  
  fclose(in); fclose(out);
  return 0; 
}