Cod sursa(job #1403692)

Utilizator ThomasFMI Suditu Thomas Thomas Data 27 martie 2015 15:17:38
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.72 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=m;i>=1;--i) if(pi[i] && i % (i - pi[i]) == 0)
        {
            mx = i;
            break;
        }

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

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