Pagini recente » Cod sursa (job #2131635) | Cod sursa (job #2802951) | Cod sursa (job #805106) | Cod sursa (job #646311) | Cod sursa (job #1227441)
#include <iostream>
#include <fstream>
#include <cstring>
#include <algorithm>
#define MAX_LENGTH 2000001
using namespace std;
char s[MAX_LENGTH], T[MAX_LENGTH];
int p[MAX_LENGTH];
int main()
{
int n, mid, r, aux;
long long sum = 0;
fstream f("pscpld.in", ios::in);
fstream g("pscpld.out", ios::out);
f >> s;
T[0] = '^';
n = strlen(s);
for(int i = 0 ; i < n ; i++)
{
T[2*i + 1] = ' ';
T[2*i + 2] = s[i];
}
T[2*n + 1] = ' ';
T[2*n + 2] = '$';
n = strlen(T);
mid = r = 0;
for(int i = 1 ; i < n-1 ; i++)
{
aux = mid - (i - mid);
if(r > i)
p[i] = min(r - i, p[aux]);
else
p[i] = 0;
while(T[i + 1 + p[i]] == T[i - 1 - p[i]])
p[i]++;
if(i + p[i] > r)
{
r = i + p[i];
mid = i;
}
sum += (p[i] + 1) / 2;
}
g << sum;
return 0;
}