Cod sursa(job #1005290)

Utilizator Andrei1998Andrei Constantinescu Andrei1998 Data 4 octombrie 2013 18:15:18
Problema Prefix Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.77 kb
#include <fstream>
#include <cstring>

using namespace std;

char sir[1000005];
int pref[1000005];

int main()
{
    ifstream cin("prefix.in");
    ofstream cout("prefix.out");

    int n,i,t=0,j,k;
    cin>>t;
    cin.get();
    for(i=0;i<t;i++)
    {
        cin.get(sir,1000005);
        cin.get();
        n=strlen(sir);
        pref[0]=0;
        k=0;
        for(j=1;j<n;j++)
        {
            while(k>0 && sir[j]!=sir[k])
                k=pref[k-1];
            if(sir[j]==sir[k])
                k++;
            pref[j]=k;
        }
        for(j=n-1;j>=0;j--)
            if(pref[j]>=((n+2)/2) && (j+1)%((j+1)-pref[j])==0)
                break;
        cout<<j+1<<'\n';
    }

    cin.close();
    cout.close();
    return 0;
}