Pagini recente » Cod sursa (job #2514718) | Cod sursa (job #1380718) | Cod sursa (job #2003628) | Cod sursa (job #1238397) | Cod sursa (job #931089)
Cod sursa(job #931089)
#include<fstream>
#include<algorithm>
#define infile "pscpld.in"
#define outfile "pscpld.out"
#define nMax 1000005
using namespace std;
char S[2 * nMax];
int Lg[2 * nMax];
int N, 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;
}