Pagini recente » Cod sursa (job #1600878) | Cod sursa (job #3242980) | Cod sursa (job #557150) | Cod sursa (job #1515968) | Cod sursa (job #1697928)
///Abuzul de STL dauneaza grav sanatatii
#define NMAX 1000005
#include <stdio.h>
char s[2*NMAX];
int p[2*NMAX];
int main(void) {
FILE *fin = fopen("pscpld.in", "r");
FILE *fout = fopen("pscpld.out", "w");
char t;
int i, j, n, c, r;
long long ans;
c = r = n = ans = 0;
s[0]='+';
while(fscanf(fin,"%c ",&t)!=EOF) {
s[++n] = '.';
s[++n] = t;
}
s[++n]='.';
s[++n]='-';
for(i=1; i<n; ++i) {
j=2*c-i;
p[i]=(r>i)?min(r-i, p[j]):0;
while(s[i+p[i]+1]==s[i-p[i]-1])
++p[i];
if(i+p[i]>r) {
c = i;
r = i+p[i];
}
ans+=(p[i]+1)/2;
}
fprintf(fout,"%lld\n",ans);
return 0;
}
inline int min(int a, int b) {
return (a<b)?a:b;
}