Cod sursa(job #1310275)

Utilizator bogdanciurezubogdan ciurezu bogdanciurezu Data 6 ianuarie 2015 17:24:37
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <fstream>
#include <stdio.h>
#include <cstring>
#define nmax 1005000

using namespace std;
ifstream f("prefix.in");
ofstream g("prefix.out");
char s[nmax];
int T;
unsigned pr[nmax];
int main()
{int q = 0, i, N, l;

    f >> T;
    while(T){

        f >> (s + 1);
        N = strlen(s + 1);

        for(i = 1; i <= N; ++i)
            pr[i] = 0;

        l = 0;
        q = 0;
        for(pr[1] = 0, i = 2; i <= N; ++i){
            while(q && s[i] != s[q + 1]) q = pr[q];

            if(s[i] == s[q + 1]) ++q;

            pr[i] = q;
        }

        for(i = N; i > 0; --i)
            if(pr[i] && i % (i - pr[i]) == 0){
                l = i;
                i = 0;
            }
            g << l <<'\n';
            --T;
    }
    return 0;
}