Pagini recente » Cod sursa (job #2852084) | Cod sursa (job #2289354) | Cod sursa (job #822583) | Cod sursa (job #2368678) | Cod sursa (job #6165)
Cod sursa(job #6165)
#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;
}