Pagini recente » Cod sursa (job #746255) | Cod sursa (job #2500512) | Cod sursa (job #3130114) | Cod sursa (job #1633415) | Cod sursa (job #263735)
Cod sursa(job #263735)
#include <fstream>
using namespace std;
#define MAX_N 2000004
ifstream fin ("pscpld.in");
ofstream fout ("pscpls.out");
char S[MAX_N];
int N, bst = 1, L[MAX_N];
long long Sol;
inline int Min(const int a, const int b)
{
return ((a) < (b)) ? (a) : (b);
}
void citire()
{
for(N = 2; fin >> (S[N - 1]); N += 2);
N -= 2;
if(S[N - 1] == '\n')
N -= 2;
}
void solve()
{
for(int i = 1; i < N; ++i)
{
if(bst + L[bst] - 1 < i)
L[i] = (i & 1);
else
L[i] = Min(L[2 * bst - i], bst + L[bst] - i);
int j = L[i] + 1;
while(i - j > 0 && i + j <= N && S[i + j] == S[i - j])
j += 2;
L[i] = j - 1;
if(i + L[i] > bst + L[bst])
bst = i;
Sol += (L[i] + 1) >> 1;
}
fout << Sol;
}
int main()
{
citire();
solve();
}