Pagini recente » Cod sursa (job #1510519) | Cod sursa (job #751185) | Cod sursa (job #1497961) | Cod sursa (job #2093612) | Cod sursa (job #2456558)
#include <bits/stdc++.h>
#define maxim 1000005
using namespace std;
ifstream f("pscpld.in");
ofstream g("pscpld.out");
int z[maxim];
int main()
{
string s;
char x;
int ans = 0;
while (f >> x)
{
s += "#";
s += x;
ans ++;
}
s = "!" + s + "#";
int n = s.length();
int c = 0, r = 0;
for (int i = 1; i < n; ++ i)
{
int op = 2 * c - i;
if (i > r || z[op] >= r - i)
{
if (i > r)
r = i;
int k = r;
while (k < n && s[k] == s[2 * i - k])
k ++;
k --;
z[i] = k - i;
if (k > c)
{
c = i;
r = k;
}
}
else
z[i] = z[op];
}
for (int i = 1; i < n; ++ i)
ans += z[i] / 2;
g << ans;
}