Pagini recente » Cod sursa (job #2376859) | Cod sursa (job #1335061) | Cod sursa (job #927178) | Cod sursa (job #1066795) | Cod sursa (job #479613)
Cod sursa(job #479613)
#include<stdio.h>
#include<string.h>
int *p, n;
char *a;
int prefix(int length){
int k = -1, max = 0;
p = new int [length];
p[0] = -1;
for(int i=1; i<length; i++) {
while(k>=0 && a[k+1] != a[i])
k = p[k];
if(a[k+1] == a[i]) ++k;
p[i] = k;
if(k != -1 && !((i+1)%(i-k))) max = i+1;
}
delete[] p;
return max;
}
void read(){
FILE *ifile;
ifile = fopen("prefix.in", "r");
fscanf(ifile, "%i", &n);
FILE *ofile;
ofile = fopen("prefix.out", "w");
for(int i=0; i<n; i++) {
a = new char[1000005];
fscanf(ifile, "%s", a);
fprintf(ofile, "%i\n", prefix(strlen(a)));
delete[] a;
}
fclose(ifile);
fclose(ofile);
}
int main()
{
read();
return 0;
}