Pagini recente » Cod sursa (job #2612094) | Cod sursa (job #617996) | Cod sursa (job #682986) | Borderou de evaluare (job #2016170) | Cod sursa (job #2345305)
#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 s, s1;
int dp[2000002];
int main()
{
fin >> s1;
for (int i = 0; i < s1.size(); i++) {
s += s1[i];
s += '#';
}
s += '#';
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;
fout << sol / 2;
return 0;
}