Pagini recente » Cod sursa (job #834079) | Cod sursa (job #2148664) | Cod sursa (job #882617) | Cod sursa (job #252117) | Cod sursa (job #2023281)
#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 += '#';
//cout<<sir<<'\n';
long long pos = 0;
for (auto &x : poli){
x++;
}
for (long long i=1; i<sir.size(); i++){
if (pos * 2 - i >= 0 && pos * 2 - i - poli[ pos * 2 - i] > pos - poli[pos]){
poli[i] = poli[ pos * 2 - i];
continue;
}
long long intrare = i+1;
if (pos + poli[pos] - 1 > i){
intrare = i + 1 + pos + poli[pos] - 1 - i;
poli[i] += pos + poli[pos] - 1 - i;
}
for (long long j=intrare; j<sir.size(); j++){
if (2 * i - j >= 0 && 2 * i - j <sir.size() && sir[j] == sir[ 2 * i - j]){
poli[i]++;
}
else{
break;
}
}
pos = i;
}
long long cont = 0;
for (long long i=0; i<sir.size(); i++){
if (sir[i + poli[i] - 1] != '#'){
poli[i] ++;
}
//cout<<poli[i] / 2<<" ";
cont += poli[i] / 2 ;
}
cout<<cont;
return 0;
}