Cod sursa(job #1304316)

Utilizator EpictetStamatin Cristian Epictet Data 28 decembrie 2014 20:39:06
Problema Prefix Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.65 kb
#include <fstream>
#include <string>
using namespace std;
ifstream fin ("prefix.in");
ofstream fout ("prefix.out");
int N, V[1000010];
string S;

int Prefix()
{
    int maxim = 0, k = 0;
    for (int i = 1; i < S.size(); i++)
    {
        if (k && S[k] != S[i]) k = V[k-1];
        if (S[k] == S[i])
        {
            k++;
            if ((i + 1) % (i - V[i-1]) == 0)
            {
                maxim = i;
            }
        }
        V[i] = k;
    }
    if (maxim) maxim += 1;
    return maxim;
}

int main()
{
    fin >> N;
    for (int i = 1; i <= N; i++)
    {
        fin >> S;
        fout << Prefix() << '\n';
    }
    fout.close();
    return 0;
}