Pagini recente » Cod sursa (job #505353) | Cod sursa (job #429468) | Cod sursa (job #621586) | Cod sursa (job #1950320) | Cod sursa (job #2345303)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("pscpld.in");
ofstream fout ("pscpld.out");
const int NMAX = 2e6;
int st, dr lg;
long long sol;
string s;
int dp[2000002];
int main()
{
while(fin >> ch) {
s.push_back('#');
s.push_back(ch);
}
s.push_back('#');
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 - lg;
dr = i + lg;
}
}
sol = (s.size() - 1) / 2;
for(int i = 0; i < s.size(); i++)
sol += dp[i] - 1;
fout << sol / 2;
return 0;
}