Pagini recente » Cod sursa (job #1777330) | Cod sursa (job #413943) | Cod sursa (job #2407049) | Cod sursa (job #642726) | Cod sursa (job #1821720)
#include <cstdio>
#include <cctype>
FILE *fin, *fout;
char c[1000010];
int p[1000010];
int main() {
fin = fopen("prefix.in", "r");
fout = fopen("prefix.out", "w");
int n;
char ch;
fscanf(fin, "%d", &n);
int j;
for(j = 0;j < n;j++) {
while(!isalpha(ch))
ch = fgetc(fin);
int nr = 1;
while(isalpha(ch)) {
c[nr] = ch;
ch = fgetc(fin);
nr++;
}
p[1] = 0;
int k = 0;
int ans = 0;
for(int i = 2;i <= nr;i++) {
while(k > 0 && c[k + 1] != c[i])
k = p[k];
if(c[k + 1] == c[i])
k++;
p[i] = k;
if(p[i] && i % (i - p[i]) == 0)
ans = i;
}
fprintf(fout, "%d\n", ans);
}
fclose(fin);
fclose(fout);
return 0;
}