Pagini recente » Cod sursa (job #2981607) | Cod sursa (job #1415575) | Cod sursa (job #2724382) | Cod sursa (job #1973611) | Cod sursa (job #479601)
Cod sursa(job #479601)
#include<stdio.h>
#include<string.h>
int *p, n;
char *a;
int prefix(int length){
int k = -1, max = 0, l = 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 > max && i-k <= k+1) {
max = k+1;
l = i+1 - (i+1)%(i-k);
}
}
delete[] p;
return l;
}
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;
}