Cod sursa(job #837113)

Utilizator Theorytheo .c Theory Data 17 decembrie 2012 14:09:11
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include<fstream>
#include<string.h>
#define ll long long
#define nmax 500008
using namespace std;
ifstream fin("prefix.in");
ofstream fout("prefix.out");

int T;
int Pi[nmax* 2];
int K;
char s[10000009];
int main(){
    fin >>T;
    int M;
    int max_per = 0;
    for( ; T ; -- T){
        fin >> s + 1;
        Pi[1] = 0;
        M = strlen(s + 1);
        int max_per = 0;
        for(int q = 0 , i = 2;  s[i] ; i++){
            for( ; q && s[i] != s[q + 1]; q = Pi[q]);

            q += (s[q + 1] == s[i]);

            Pi[i] = q;
        }
        for(int i = 1; i<= M / 2 + 1; i++)
        {
            if(Pi[i + 1] == 1)
                for(int j = 2;i * j <= M && Pi[i * j] % i == 0  && Pi[i * j] ; j++)
                    if(max_per < i * j) max_per = i *j;
        }
        fout << max_per <<'\n';

    }
    return 0;
}