Pagini recente » Cod sursa (job #1538839) | Cod sursa (job #3191873) | Cod sursa (job #1031612) | Cod sursa (job #1540525) | Cod sursa (job #1576889)
#include <bits/stdc++.h>
using namespace std;
string S;
void citire() {
string tmp;
ifstream("pscpld.in") >> tmp;
for(int i = 0; i < (int)tmp.size(); ++i) {
S += tmp[i]; S += '$';
}
}
void solve() {
vector<int>dp(S.size());
int idx = 0;
long long ret = 0;
dp[0] = 1;
for(int i = 1; i < (int)S.size(); ++i) {
int fact = max(1, min(dp[idx] + idx - i, dp[idx * 2 - i]));
int L = i - fact, R = i + fact;
dp[i] = fact;
while(L >= 0 && R < (int)S.size() && S[L] == S[R]) {
--L, ++R;
dp[i]++;
}
if(i + dp[i] > idx + dp[idx])
idx = i;
}
for(int i = 0; i < (int)S.size(); ++i) {
auto it = S[i] != '$';
ret += (dp[i] + it) >> 1;
}
ofstream("pscpld.out") << ret;
}
int main() {
citire();
solve();
return 0;
}