Pagini recente » Cod sursa (job #330502) | Cod sursa (job #617649) | Cod sursa (job #2384739) | Cod sursa (job #14303) | Cod sursa (job #864456)
Cod sursa(job #864456)
#include <fstream>
#include <cstring>
#include <algorithm>
#define NM 2000010
using namespace std;
ifstream f("pscpld.in");
ofstream g("pscpld.out");
int N, M, K;
int i, j;
int C, R;
int P[NM];
int Sum[NM];
char AX[NM], S[NM];
long long VANS;
int main ()
{
f >> AX+1;
M=strlen(AX+1);
for (i=1; i<=M; i++)
{
S[++N]=AX[i];
if (i<M) S[++N]='#';
}
for (i=1; i<=N; i++)
{
Sum[i]=Sum[i-1]+(S[i]=='#');
if (C) P[i]=min(P[C-(i-C)], R-i);
P[i]=max(0, P[i]);
while (i+P[i]<=N && i-P[i]>=1 && S[i-P[i]]==S[i+P[i]]) P[i]++;
P[i]--;
if (i+P[i]>R)
{
C=i;
R=i+P[i];
}
if (S[i]!='#') VANS++;
VANS+=1LL*P[i]-(Sum[i-1]-Sum[i-P[i]-1]);
}
g << VANS << '\n';
f.close();
g.close();
return 0;
}