Pagini recente » Cod sursa (job #1048304) | Cod sursa (job #2509562) | Cod sursa (job #3291702) | Cod sursa (job #647142) | Cod sursa (job #2798464)
#include <bits/stdc++.h>
using namespace std;
const int NMAX = 2000000;
int lps[NMAX + 5];
int main()
{
ifstream fin("pscpld.in");
ofstream fout("pscpld.out");
int n,md = -1,poz = 0;
long long ans = 0;
string s,s1;
fin >> s1;
s += '#';
for (int i = 0;i < s1.size();i++) {
s += s1[i];
s += '#';
}
for (int i = 0;i < s.size();i++) {
if (i <= poz + md)
lps[i] = min(lps[2 * md - i], md + poz - i);
while (i + lps[i] + 1 < s.size() && i - lps[i] - 1 >= 0 && s[i + lps[i] + 1] == s[i - lps[i] - 1])
lps[i]++;
if (lps[i] + i > md + poz) {
md = i;
poz = lps[i];
}
ans += (lps[i] + i % 2) / 2;
}
fout << ans;
return 0;
}