Cod sursa(job #614064)

Utilizator theodora_maneaManea Theodora Maria theodora_manea Data 5 octombrie 2011 16:22:06
Problema Prefix Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <fstream>
#include <string.h>

#define max_n 1000002

using namespace std;

int i,n,l[max_n],per[max_n],t,k,rez,j;
char s[max_n];

ifstream in("prefix.in");
ofstream out("prefix.out");

int main () {
    in >> t;
    for (j=1; j<=t; ++j) {
        in >> (s+1);
        n=strlen(s+1);
        memset(l,0,sizeof(l));
        memset(per,0,sizeof(per));
        k=0;
        for (i=2; i<=n; i++)
        {
            while (k!=0 && s[k+1]!=s[i]) k=l[k];
            if (s[k+1]==s[i]) k++;
            l[i]=k;
            if (i==2*k) {
                per[i]=k;
                rez=i;
            }
            else
            if (i<=2*k && per[k]==i-k) {
                rez=i;
                per[i]=i-k;
            }
        }

        out << rez << '\n';
    }
    return 0;
}