Cod sursa(job #2025098)

Utilizator Johnny07Savu Ioan-Daniel Johnny07 Data 21 septembrie 2017 21:02:59
Problema Prefix Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("prefix.in");
ofstream g("prefix.out");

int aux[1000010],t;
char c[1000010];

void solve ()
{
    int i,j,k;
    int sol=0;
    f.getline (c,1000010);
 int n=strlen(c);
    for (i=n;i>=1;i--) {c[i]=c[i-1];aux[i]=0;}
    c[0]=' ';
    j=0;
 for (i=2;i<=n;i++)
    {
        while (j && c[i]!=c[j+1])
        {
            j=aux[j];
        }
        if (c[j+1]==c[i])
        {
            aux[i]=j+1;
            j++;
        }
        k=i;
        while (k && aux[k]*2!=k)
        {
            if (aux[k]*2<k) k=0;
            k=aux[k];
        }
        if (k!=0) sol=i;

    }
g<<sol<<"\n";
}


int main()
{
f>>t;
f.getline (c,20);
for (int k=1;k<=t;k++)
{
    solve();
}
    return 0;
}