Cod sursa(job #2065599)

Utilizator dragomirmanuelDragomir Manuel dragomirmanuel Data 13 noiembrie 2017 22:08:23
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <iostream>
#include <cstring>
#include <fstream>

using namespace std;

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

const int NMax = 1000005;
char s[NMax];
int pi[NMax];

void Prefix()
{
    int n = strlen(s);
    int j = 0;
    for(int i=1; i<n; ++i)
    {
        while(j > 0 && s[i] != s[j])
            j = pi[j-1];

        if(s[i] == s[j])
            ++j;

        pi[i] = j;
    }
}


int main()
{
    int T;
    fin >> T;
    for(int i=1; i<=T; ++i)
    {
        fin >> s;
        Prefix();

        int n = strlen(s), rez = 0 ;

        for(int k = 0; k < n; ++k)
            if(pi[k])
            {
                int k1 = k+1;
                int val = k1 - pi[k];
                if(k1 % val == 0)
                    rez = k1;
            }

        fout << rez << "\n";
    }

    return 0;
}