Cod sursa(job #1821720)

Utilizator mihai.alphamihai craciun mihai.alpha Data 3 decembrie 2016 15:11:59
Problema Prefix Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <cstdio>
#include <cctype>
FILE *fin, *fout;

char c[1000010];
int p[1000010];
int main()  {
    fin = fopen("prefix.in", "r");
    fout = fopen("prefix.out", "w");
    int n;
    char ch;
    fscanf(fin, "%d", &n);
    int j;
    for(j = 0;j < n;j++)  {
        while(!isalpha(ch))
            ch = fgetc(fin);
        int nr = 1;
        while(isalpha(ch))  {
            c[nr] = ch;
            ch = fgetc(fin);
            nr++;
        }
        p[1] = 0;
        int k = 0;
        int ans = 0;
        for(int i = 2;i <= nr;i++)  {
            while(k > 0 && c[k + 1] != c[i])
                k = p[k];
            if(c[k + 1] == c[i])
                k++;
            p[i] = k;
            if(p[i] && i % (i - p[i]) == 0)
                ans = i;
        }
        fprintf(fout, "%d\n", ans);
    }
    fclose(fin);
    fclose(fout);
    return 0;
}