Pagini recente » Cod sursa (job #379503) | Cod sursa (job #1957586) | Cod sursa (job #2059277) | Cod sursa (job #1118741) | Cod sursa (job #864444)
Cod sursa(job #864444)
#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];
char ANS[NM];
int 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 (i<=R)
P[i]=P[C-(i-C)];
while (i+P[i]<=N && i-P[i]>=1 && S[i-P[i]]==S[i+P[i]]) P[i]++;
P[i]--;
if (P[i]>R)
{
C=i;
R=P[i];
}
if (S[i]!='#') VANS++;
VANS+=P[i]-(Sum[i-1]-Sum[i-P[i]-1]);
}
g << VANS << '\n';
f.close();
g.close();
return 0;
}