Pagini recente » Cod sursa (job #1982600) | Cod sursa (job #1167969) | Cod sursa (job #1280191) | Cod sursa (job #1274099) | Cod sursa (job #2437469)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("pscpld.in");
ofstream fout("pscpld.out");
char c[2000005];
int d[2000005];
int main()
{
char a;
int n = 0;
c[0] = '-';
while (fin >> a)
{
c[++n] = a;
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;
}