Pagini recente » Cod sursa (job #326566) | Cod sursa (job #1639237) | Cod sursa (job #3285539) | Cod sursa (job #7729) | Cod sursa (job #1697931)
///Abuzul de STL dauneaza grav sanatatii
#define NMAX 1000010
#include <stdio.h>
char s[2*NMAX], str[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, buff;
long long ans;
fgets(str, NMAX, fin);
c = r = n = ans = buff = 0;
s[0]='+';
while((t=str[buff++])!='\n') {
s[++n] = '.';
s[++n] = t;
}
s[++n]='.';
s[++n]='-';
for(i=1; i<n; ++i) {
j=c+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)>>1;
}
fprintf(fout,"%lld\n",ans);
return 0;
}
inline int min(int a, int b) {
return (a<b)?a:b;
}