Pagini recente » Cod sursa (job #1589446) | Cod sursa (job #2606972) | Cod sursa (job #2939110) | Cod sursa (job #1720205) | Cod sursa (job #22937)
Cod sursa(job #22937)
#include <cstdio>
const int NMAX = 1 << 20;
char S[NMAX];
int pi[NMAX];
int D[NMAX];
void prefix(int &mx) {
int i, j;
pi[0] = pi[1] = 0;
for (j = 0, i = 2; S[i - 1]; ++i) {
while (j > 0 && S[j] != S[i - 1]) j = pi[j];
if (S[j] == S[i - 1]) ++j;
pi[i] = j;
D[i] = -1;
if (D[j] != -1 && j + D[j] == i) D[i] = D[j], mx = i;
if (j + j == i) D[i] = j, mx = i;
}
}
int main() {
FILE *fin = fopen("prefix.in", "rt");
FILE *fout = fopen("prefix.out", "wt");
int t, rez;
fscanf(fin, " %d", &t);
while (t--) {
fscanf(fin, " %s", S);
prefix(rez = 0);
fprintf(fout, "%d\n", rez);
}
fclose(fin);
fclose(fout);
return 0;
}