Pagini recente » Cod sursa (job #2146245) | Cod sursa (job #176647) | Cod sursa (job #581293) | Cod sursa (job #1264282) | Cod sursa (job #2264133)
#include <bits/stdc++.h>
using namespace std;
ifstream in ("pscpld.in");
ofstream out ("pscpld.out");
const int NMAX = 1e6;
int l, r, lg;
long long sol;
char ch;
string s;
int dp[1 + NMAX];
int main() {
while(in >> ch) {
s.push_back('$');
s.push_back(ch);
}
s.push_back('$');
for(int i = 0; i < s.size(); i++) {
if(i > r)
lg = 0;
else
lg = min(r - i, dp[l + r - i]);
while(i + lg < s.size() && i >= lg && s[i - lg] == s[i + lg])
lg++;
dp[i] = lg;
// out << "Intre " << i - lg + 1 << " si " << i + lg - 1 << "\n";
lg--;
if(i + lg > r) {
l = i - lg;
r = i + lg;
}
}
sol = (s.size() - 1) / 2;
for(int i = 0; i < s.size(); i++)
sol += dp[i] - 1;
out << sol / 2;
return 0;
}