Pagini recente » Cod sursa (job #262016) | Cod sursa (job #443404) | Rating TEST TEST (mh370) | Cod sursa (job #506380) | Cod sursa (job #2901917)
#include <bits/stdc++.h>
using namespace std;
ifstream in("pscpld.in");
ofstream out("pscpld.out");
char a[2000005];
int mn[2000005],n;
int main()
{
char ch;
n = 1;
a[1] = '*';
while (in >> ch)
{
a[n + 1] = ch;
a[n + 2] = '*';
n += 2;
}
int l = 0,r = 0;
for (int i = 1; i <= n; i++)
{
if (i > r)
{
l = i;
mn[i] = 0;
int st = i,dr = i;
while (st > 1 and dr < n and a[st - 1] == a[dr + 1])
st--,dr++,mn[i]++;
}
else
{
int mid = (r + l) / 2;
int ip = 2 * mid - i;
int left = ip - l;
if (mn[ip] < left)
mn[i] = mn[ip];
else
{
mn[i] = r - i;
int dr = r;
int st = 2 * i - r;
while (st > 1 and dr < n and a[st - 1] == a[dr + 1])
st--,dr++,mn[i]++;
}
}
}
long long sum = 0;
for (int i = 2; i <= n; i += 2)
sum += 1 + mn[i] / 2;
for (int i = 1; i <= n; i += 2)
sum += mn[i] / 2;
out << sum;
return 0;
}