Cod sursa(job #2430123)

Utilizator rd211Dinucu David rd211 Data 12 iunie 2019 20:24:16
Problema Prefix Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("prefix.in");
ofstream fout("prefix.out");
char pattern[1000010];
int helper[1000010];
int n;
short t;

void buildHelper()
{
    for(int i = 1,j=0;i<=n;i++)
    {
        while(j && pattern[i] != pattern[j])
            j = helper[j-1];

        if(pattern[i]==pattern[j])
            j++;
        helper[i]=j;
    }
}
void resetHelper()
{
    for(int i = 0;i<=n;i++)
        helper[i]=0;
}
void calcPrefix()
{
    int res = 0;
    for(int j=1;j<=n+1;j++)
        if(j%(j-helper[j-1])==0 && helper[j-1])
            res = j;
    fout<<res<<'\n';
}
int main()
{
    int k;
    fin>>t;
    for(int i = 1; i<=t; i++)
    {
        fin>>pattern;
        for(k = 0; pattern[k]!='\0'; k++);
        n = k-1;
        buildHelper();
        calcPrefix();
        resetHelper();
    }
    fin.close();
    fout.close();
    return 0;
}