Pagini recente » Cod sursa (job #2072493) | Cod sursa (job #2650418) | Cod sursa (job #2042891) | Cod sursa (job #316680) | Cod sursa (job #2023309)
#include <fstream>
using namespace std;
ifstream cin("pscpld.in");
ofstream cout("pscpld.out");
long long poli[2000100];
int main() {
string s;
cin>>s;
string sir;
for (long long i=0; i<s.size(); i++){
sir += '#';
sir += s[i];
}
sir += '#';
const long long lung = sir.size();
//cout<<sir<<'\n';
long long pos = 0;
for (auto &x : poli){
x++;
}
long long op = 0;
for (long long i=1; i<lung; i++){
op++;
long long opus = pos * 2 - i;
if (opus >= 0 && opus - poli[opus] > pos - poli[pos]){
poli[i] = poli[opus];
continue;
}
long long intrare = i+1;
if (pos + poli[pos] - 1 > i){
intrare = pos + poli[pos];
poli[i] += pos + poli[pos] - 1 - i;
}
for (long long j=intrare; j<lung; j++){
op++;
if (2 * i - j >= 0 && 2 * i - j <lung && sir[j] == sir[ 2 * i - j]){
poli[i]++;
}
else{
break;
}
}
pos = i;
}
long long cont = 0;
for (long long i=0; i<lung; i++){
if (sir[i + poli[i] - 1] != '#'){
poli[i] ++;
}
//cout<<poli[i] / 2<<" ";
cont += poli[i] / 2 ;
}
//cout<<lung<<" "<<op<<'\n';
cout<<cont;
return 0;
}