Cod sursa(job #4139)

Utilizator chris_11Botau Cristian chris_11 Data 30 decembrie 2006 21:43:47
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#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;
}