Cod sursa(job #1403686)

Utilizator ThomasFMI Suditu Thomas Thomas Data 27 martie 2015 15:14:31
Problema Prefix Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.73 kb
#include <fstream>
#include <cstring>
using namespace std;

#define LMax 1000005

ifstream f("prefix.in");
ofstream g("prefix.out");

int pi[LMax];
char A[LMax];
int m;

void pref()
{
    int i,q=0;
    pi[1] = 0;
    for(i=2;i<=m;++i)
    {
        while(q && A[q+1]!=A[i]) q=pi[q];
        if(A[q+1] == A[i]) q++;
        pi[i] = q;
    }
}

int mx;

int main()
{
    int T;
    f>>T;
    while(T--)
    {
        f>>(A+1);
        m = strlen(A+1);
        pref();

        mx = 0;
        for(int i=1;i<=m;++i) if(pi[i])
        {
            if(i - pi[i] == pi[i] - pi[pi[i]] && i % (i - pi[i]) == 0) mx = i;
        }

        g<<mx<<"\n";
    }

    f.close();
    g.close();
    return 0;
}