Pagini recente » Cod sursa (job #2794928) | Cod sursa (job #2032157) | Cod sursa (job #2382848) | Cod sursa (job #941452) | Cod sursa (job #2023298)
#include <fstream>
using namespace std;
ifstream cin("pscpld.in");
ofstream cout("pscpld.out");
long long poli[2000100];
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
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++;
}
long long op = 0;
for (long long i=1; i<sir.size(); 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 = i + 1 + pos + poli[pos] - 1 - i;
poli[i] += pos + poli[pos] - 1 - i;
}
for (long long j=intrare; j<sir.size(); j++){
op++;
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<<sir.size()<<" "<<op<<'\n';
cout<<cont;
return 0;
}