Pagini recente » Cod sursa (job #2591309) | Cod sursa (job #980308) | Cod sursa (job #3127199) | Cod sursa (job #141422) | Cod sursa (job #2345324)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("pscpld.in");
ofstream fout ("pscpld.out");
const int NMAX = 2e6;
int st, dr, len;
long long sol;
string s1;
vector<char>s;
int dp[2000002];
int main()
{
fin >> s1;
for (int i = 0; i < s1.size(); i++) {
s.push_back('#');
s.push_back(s1[i]);
}
s.push_back('#');
st = dr = len = 0;
for(int i = 0; i < s.size(); i++) {
if(i > dr)
len = 0;
else
len = min(dr - i, dp[st + dr - i]);
while(i + len < s.size() && i >= len && s[i - len] == s[i + len])
len++;
dp[i] = len;
len--;
if(i + len > dr) {
st = i - len;
dr = i + len;
}
}
sol += (s.size() - 1) / 2;
for(int i = 0; i < s.size(); i++)
sol += (dp[i] - 1) / 2;
fout << sol;
return 0;
}