Pagini recente » Cod sursa (job #2482775) | Cod sursa (job #750412) | Cod sursa (job #135539) | Cod sursa (job #1962519) | Cod sursa (job #2901918)
#include <bits/stdc++.h>
using namespace std;
ifstream in("pscpld.in");
ofstream out("pscpld.out");
vector<char>a;
int mn[2000005],n;
int main()
{
char ch;
a.push_back('v');
a.push_back('*');
while (in >> ch)
{
v.push_back(ch);
v.push_back('*');
}
n = v.size();
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]++;
r = i + 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]++;
r = i + mn[i];
l = i - 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;
}