Pagini recente » Cod sursa (job #1856344) | Cod sursa (job #892285) | Cod sursa (job #2902486) | Cod sursa (job #2989799) | Cod sursa (job #4139)
Cod sursa(job #4139)
#include <stdio.h>
#define INPUT_F "prefix.in"
#define OUTPUT_F "prefix.out"
#define MAX_LEN 1000100
char s[MAX_LEN];
int p[MAX_LEN];
int solve()
{
int ret = 0;
char *cs = s + 2;
p[0] = s[0] = 0;
p[1] = 0;
for (int i = 2, k = 0; *cs; ++cs, ++i)
{
while (*cs != s[k + 1] && k > 0)
k = p[k];
if (*cs == s[k + 1]) ++k;
// update sol
if (k)
if (i % (i - k) == 0)
if (i > ret)
ret = i;
}
return ret;
}
int main()
{
FILE *fin = fopen(INPUT_F, "r"),
*fout = fopen(OUTPUT_F, "w");
int T;
for (fscanf(fin, "%d", &T); T; --T)
fscanf(fin, "%s", s + 1),
fprintf(fout, "%d\n", solve());
fclose(fin), fclose(fout);
return 0;
}