Cod sursa(job #1756946)

Utilizator ghost24ghost ghost ghost24 Data 13 septembrie 2016 23:46:36
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include<iostream>
#include<fstream>
#include<string>
#define DX 1000100

using namespace std;
fstream fin("prefix.in",ios::in),fout("prefix.out",ios::out);
int n,pre[DX],bif[DX];
string s,a;

void kmp();

int main()
{
    int i;
    fin>>n;
    for(i=1;i<=n;i++)
    {
        fin>>a;
        s=' '+a;
        kmp();
    }
}
void kmp()
{
    int poz=0,i,maxim=0;
    bif[1]=1;
    for(i=2;i<s.size();i++)
    {
        pre[i]=bif[i]=0;
        while(poz && s[poz+1]!=s[i]) poz=pre[poz];
        if(s[poz+1]==s[i]) poz++;
        pre[i]=poz;

        if(pre[i]==0)
            bif[i]=i;
        else
            bif[i]=i-pre[i];

        if(bif[pre[i]]==bif[i] || bif[i]==pre[i])
        {
            maxim=max(maxim,i);
        }
        else
        {
            if(pre[i]!=0) bif[i]=0;
        }
    }
    fout<<maxim<<"\n";
}