Pagini recente » Cod sursa (job #2949769) | Cod sursa (job #1845753) | Cod sursa (job #2379983) | Cod sursa (job #616659) | Cod sursa (job #2437482)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("pscpld.in");
ofstream fout("pscpld.out");
char a[1000005], c[2000005];
int d[2000005];
int main()
{
fin >> a;
int n = 0;
c[0] = '-';
for (int i = 0; a[i]; i++){
c[++n] = a[i];
c[++n] = '-';
}
n--;
int centru = 0;
long long sol = 0;
for (int i = 0; i <= n + 1; i++){
int i2 = 2 * centru - i;
if (i < centru + d[centru])
d[i] = i2 - max(i2 - d[i2], centru - d[centru]);
while (i + d[i] <= n + 1 && i - d[i] >= 0){
if (c[i + d[i]] == c[i - d[i]])
d[i]++;
else
break;
}
if (i + d[i] > centru + d[centru])
centru = i;
d[i]--;
if (c[i] == '-')
sol += d[i] / 2;
else
sol += d[i] / 2 + 1;
}
fout << sol << '\n';
return 0;
}