Pagini recente » Cod sursa (job #2648595) | Cod sursa (job #924728) | Cod sursa (job #2561764) | Cod sursa (job #355352) | Cod sursa (job #6166)
Cod sursa(job #6166)
#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;
}