Cod sursa(job #6165)

Utilizator Binary_FireFlorin Pogocsan Binary_Fire Data 17 ianuarie 2007 22:17:01
Problema PScPld Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include<stdio.h>
#define Fin "pscpld.in"
#define Fout "pscpld.out"
#define NMAX 2000002
long dim=1,v[NMAX],lung[NMAX],s,iter;
FILE *in,*out;

long min(long a,long b) { (a<b)?(a):(a=b); return a; }

int main() {
 char c;
 long i,j,st,dr,aux,aux2;
 in=fopen(Fin,"r"); out=fopen(Fout,"w");
 c=fgetc(in);
 while (c!=EOF && c!='\n') {
  dim++;
  v[dim]=(long)c;
  dim++;
  c=fgetc(in);
  }
 //for (i=1;i<=dim;i++) fprintf(out,"%c ",v[i]);
 for (i=1;i<=dim;i++) {
  aux=lung[i];
  for (st=i-lung[i],dr=i+lung[i];v[st]==v[dr] && st>0 && dr<=dim;st--,dr++) 
  { lung[i]++; iter++; }
  aux2=st;
  for (st++,dr--;st<=i-aux;st++,dr--) 
   if (lung[dr]<min(lung[st],st-aux2)) lung[dr]=min(lung[st],st-aux2);
  /*fprintf(out,"\n"); 
  for (j=1;j<=dim;j++) fprintf(out,"%ld ",lung[j]);
  fprintf(out," :%c",v[i]);*/
  s+=lung[i]/2;
  }
 fprintf(out,"%ld\n",s); 
 fclose(in); fclose(out);
 return 0;
 }