Pagini recente » Cod sursa (job #1230820) | Cod sursa (job #2308424) | Cod sursa (job #2677259) | Cod sursa (job #2071502) | Cod sursa (job #303037)
Cod sursa(job #303037)
#include<cstdio>
#include<cstring>
using namespace std;
#define INPUT "prefix.in"
#define OUTPUT "prefix.out"
const long NMAX = 1000001;
FILE *fin = fopen(INPUT, "r"), *fout = fopen(OUTPUT, "w");
char Sir[ NMAX ];
long len, max;
long pre[ NMAX ];
void prefix()
{
pre[ 0 ] = -1;
long k = -1;
for(long i = 1; i < len; ++i)
{
while(k >= 0 && Sir[ k+1 ] != Sir[ i ]) k = pre[ k ];
if(Sir[ k+1 ] == Sir[ i ]) ++k;
pre[ i ] = k;
if(pre[ i ] >= 0)
if((i+1)%(i-pre[i])==0 && max < i+1) max = i+1;
}
fprintf(fout, "%ld\n", max);
}
int main()
{
int T;
fscanf(fin, "%d", &T);
for(;T--;)
{
max = 0;
fscanf(fin, "%s", &Sir);
len = strlen(Sir);
prefix();
}
fclose(fin);
fclose(fout);
return 0;
}