Pagini recente » Cod sursa (job #1168530) | Cod sursa (job #549934) | Cod sursa (job #286861) | Cod sursa (job #1390812) | Cod sursa (job #931094)
Cod sursa(job #931094)
#include<fstream>
#include<algorithm>
#define infile "pscpld.in"
#define outfile "pscpld.out"
#define nMax 2000005
using namespace std;
char S[nMax];
int Lg[nMax];
int N;
long long Sol;
int main(){
ifstream f(infile);
ofstream g(outfile);
while(f >> S[2 * N + 1])
N ++;
for(int idx = 1, i = 1; i < 2 * N; ++ i){
if(idx + Lg[idx] - 1 < i)
Lg[i] = i & 1;
else
Lg[i] = min(Lg[idx - (i - idx)], idx + Lg[idx] - i);
int j = Lg[i] + 1;
while(i - j >= 1 && i + j < 2 * N && S[i-j] == S[i+j]) j += 2;
Lg[i] = j - 1;
if(i + Lg[i] > idx + Lg[idx])
idx = i;
Sol += (Lg[i] + 1) / 2;
}
g << Sol << '\n';
return 0;
}