Pagini recente » Cod sursa (job #1758323) | Cod sursa (job #1541619) | Cod sursa (job #3276141) | Cod sursa (job #510816) | Cod sursa (job #2798623)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("pscpld.in");
ofstream fout("pscpld.out");
string temp, s;
int v[2000005];
long long ans;
int main()
{
fin >> temp;
int len = temp.size();
s = '0';
for(int i = 1; i <= len; i++)
{
s += temp [i - 1];
s += '0';
}
len *= 2;
cout << s << '\n' << 0;
int poz = 0, dr = 0;
for(int i = 1; i < len; i++)
{
int sim = 2 * poz - i;
if(dr > i)
v[i] = min(dr - i, v[sim]);
while(s[i + v[i] + 1] == s[i - 1 - v[i]])
v[i]++;
if(i + v[i] > dr)
{
poz = i;
dr = i + v[i];
}
cout << v[i];
if(i % 2 == 1)
ans += (v[i] + 1) / 2;
else
ans += v[i] / 2;
}
fout << ans;
return 0;
}