Pagini recente » Cod sursa (job #1581122) | Cod sursa (job #1523837) | Cod sursa (job #2667212) | Cod sursa (job #2546651) | Cod sursa (job #2722727)
#include <bits/stdc++.h>
using namespace std;
ifstream f("pscpld.in");
ofstream g("pscpld.out");
// #define f cin
// #define g cout
// code-runner.runInTerminal
string s("&#");
vector<int> lps;
long long rez;
int main()
{
for (char ch; f >> ch;)
s += ch, s += '#', rez++;
s += '$';
lps.resize(s.size());
int c = 0, r = 0;
for (int i = 1; i < s.size() - 2; i++)
{
int im = 2 * c - i;
if (r > i)
lps[i] = min(r - i, lps[im]);
while (s[i + 1 + lps[i]] == s[i - 1 - lps[i]])
lps[i]++;
if (i + lps[i] > r)
c = i, r = i + lps[i];
if (i % 2 == 0)
rez += (lps[i] - 1) / 2;
else
rez += (lps[i]) / 2;
}
g << rez;
return 0;
}