Cod sursa(job #1976178)

Utilizator raulmuresanRaul Muresan raulmuresan Data 2 mai 2017 21:15:23
Problema Prefix Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.69 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("prefix.in");
ofstream fout("prefix.out");

const int Nmax = 100005;
int T, pi[Nmax];
string a;

void solve()
{
    int i, n, k;
    fin >> a;
    n = a.length();
    a = ' ' + a;
    //scanf("%s\n", a+1);
    //n = strlen(a+1);

    pi[1] = k = 0;
    for(i=2; i<=n; ++i)
    {
        while(k && a[k+1] != a[i])
            k = pi[k];

        if(a[k+1] == a[i]) ++k;
        pi[i] = k;
    }

    for(i=n; i; --i)
        if(pi[i]!=0 && pi[i] % (i-pi[i]) == 0)
            break;

    fout << i<<"\n";
    for(i=1; i<=n; ++i) a[i] = 0;
}

int main()
{


    fin >> T;
    while(T--) solve();


}