Pagini recente » Cod sursa (job #3312679) | Cod sursa (job #3330945) | Cod sursa (job #3333957) | Cod sursa (job #3344090) | Cod sursa (job #3334079)
#include <stdio.h>
#define BAZA 998244353
#define MOD 1000000007
#define MAX_N 1000000
unsigned long long bazapower[MAX_N/2];
unsigned long long enc[MAX_N];
int main()
{
FILE *fin = fopen("prefix.in", "r");
FILE *fout = fopen("prefix.out", "w");
int q, i, j, l, n, val, maxl=0, ok;
unsigned long long key, x1, x2, xf;
char ch;
bazapower[0] = BAZA%MOD;
for(i=1; i<MAX_N/2; i++)
bazapower[i] = bazapower[i-1]*(BAZA%MOD)%MOD;
fscanf(fin, "%d ", &q);
for(i=0; i<q; i++) {
n = 0;
ch = fgetc(fin);
enc[0] = (ch-'0')%MOD;
while(ch!='\n' && ch!=EOF) {
val = ch-'0';
if(n!=0)
enc[n] = (enc[n-1]*BAZA%MOD+val)%MOD;
n++;
ch = fgetc(fin);
}
maxl = 0;
for(l=0; l<n/2; l++) {
//fprintf(fout, "l:%d ", l);
key = enc[l];
val = 1;
j = l+1;
ok = 0;
while(ok==0 && j+l<n) {
x1 = enc[j+l];
x2 = enc[j-1]*bazapower[l]%MOD;
xf = (x1-x2+MOD)%MOD;
if(xf==key) {
//fprintf(fout, "%d ", j);
val++;
}
else
ok = 1;
j+=l+1;
}
if(val>1 && val*(l+1)>maxl)
maxl = val*(l+1);
//fprintf(fout, "val:%d\n", val);
}
fprintf(fout, "%d\n", maxl);
//for(j=0; j<n; j++)
// fprintf(fout, "%llu ", enc[j]);
//fprintf(fout, "\n");
}
fclose(fin);
fclose(fout);
return 0;
}