Pagini recente » Cod sursa (job #1938410) | Cod sursa (job #2929341) | Cod sursa (job #67209) | Cod sursa (job #2424369) | Cod sursa (job #2370400)
#include <bits/stdc++.h>
using namespace std;
string s;
void precalc(){
string cps = "$";
for(int i = 0; i < int(s.size()); ++i){
cps += s[i];
cps += '$';
}
s = cps;
}
int lps[1000005];
int n;
int main()
{
ifstream fin("pscpld.in");
ofstream fout("pscpld.out");
ios_base::sync_with_stdio(false);
fin.tie(0);
fout.tie(0);
getline(fin, s);
precalc();
n = int(s.size());
int l = 0, r = -1, currentlps = 0, sum = 0;
for(int i = 0; i < n; ++i){
if(i > r) currentlps = 1;
else currentlps = min(r - i, lps[l + r - i]);
while(i - currentlps >= 0 && i + currentlps < n && s[i - currentlps] == s[i + currentlps])
currentlps++;
lps[i] = currentlps;
currentlps--;
sum += lps[i] / 2;
if(i + currentlps > r){
r = i + currentlps;
l = i - currentlps;
}
}
fout << sum;
return 0;
}