Pagini recente » Cod sursa (job #2470154) | Cod sursa (job #1548473) | Cod sursa (job #572870) | Cod sursa (job #839570) | Cod sursa (job #598448)
Cod sursa(job #598448)
//S.C.
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
char s[2100000];
int P[2100000];
int main()
{
ifstream f("pscpld.in");
f >> s;
int i, j, n, m;
long long sum = 0;
n = strlen(s);
for(i = 2*n-1; i >= 0; i--){
if(i%2)
s[i] = '#';
else s[i] = s[i/2];
}
cout << s << endl;
P[0] = 0;
m = 1;
for(i = 1; i <= 2*n - 1; i++){
j = 0;
if(m >= i){
j = P[m - i];
if(j > m + P[m] - i)
j = m + P[m] - i;
}
P[i] = j;
while(i - P[i] - 1 >= 0 && i + P[i] + 1 <= 2*n - 1 && s[i + P[i] + 1] == s[i - P[i] - 1])
P[i]++;
if(i + P[i] > m)
m = i + P[i];
if(i%2)
sum += P[i] / 2;
else sum += P[i]/2 + 1;
cout << P[i] << " ";
}
sum++;
ofstream g("pscpld.out");
g << sum << endl;
return 0;
}