Pagini recente » Cod sursa (job #494006) | template/moisil-2015 | Cod sursa (job #1474556) | Rating codreanu ciprian (mafiotu) | Cod sursa (job #1003368)
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define LL long long
#define NMAX 1000007
using namespace std;
LL Ans;
int D[NMAX], A[NMAX], Last;
char a[NMAX];
int main(){
freopen("pscpld.in", "r", stdin);
freopen("pscpld.out", "w", stdout);
gets(a);
for(int i = 0; i < strlen(a); ++ i){
A[++ A[0]] = a[i] - 96;
A[++ A[0]] = 100;
}
A[++ A[0]] = 100;
for(int i = 1; i <= A[0]; ++ i){
if(i == 1){
D[i] = 1;
Last = 1;
}
else
D[i] = max(min(D[Last - (i - Last)] - 1, Last + D[Last] - i), 1);
int St = i - D[i], Dr = i + D[i];
while(St > 0 && Dr <= A[0] && A[St] == A[Dr]){
++ D[i];
-- St;
++ Dr;
}
if(A[i] == 100)
Ans += D[i] / 2;
else
Ans += (D[i] + 1) / 2;
if(i + D[i] > Last + D[i])
Last = i;
}
printf("%lld", Ans);
}