Cod sursa(job #2140843)

Utilizator SineMineSzasz Bogdan SineMine Data 23 februarie 2018 22:05:05
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.69 kb
#include <fstream>
#include <cstring>
using namespace std;

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

const int Nmax = 1000004;

int T;
char P[Nmax];
int D[Nmax];

void Solve()
{
    fin >> (P+1);
    int N = strlen(P+1);
    for (int i = 2, k = 0; i <= N; ++i)
        {
        while (k > 0 && P[k+1] != P[i])
            k = D[k];
        if (P[k+1] == P[i])
            ++k;
        D[i] = k;
        }
    for (int i = N; i > 0; --i)
        if (D[i] != 0 && i % (i - D[i]) == 0)
            {
                fout << i << '\n';
                return;
            }
    fout << "0\n";
}

int main()
{
    for (fin >> T; T; --T)
    Solve();
}