Cod sursa(job #1156029)

Utilizator teoionescuIonescu Teodor teoionescu Data 27 martie 2014 12:54:25
Problema Prefix Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include<fstream>
#include<cstring>
#include<string>
using namespace std;
ifstream in("prefix.in");
ofstream out("prefix.out");
const int Nmax = 1000100;
int T,pi[Nmax],size;
char s[Nmax];
int longest(){
    int len=-1;
    for(int i=0;i<size;i++){
        int pos=i+1;
        if(pos%2==0) if(pi[i]==pos/2) len=pos/2;
    }
    if(len<=0) return 0;
    int pos=0,best=0;
    while(pi[pos+len-1]>=best && pos+len-1<size){
        pos+=len;
        best+=len;
    }
    return best;
}
int main(){
    in>>T;in.get();
    for(;T;--T){
        in.getline(s,Nmax);
        memset(pi,0,sizeof(pi));
        int w=0;
        size=strlen(s);
        for(int i=1;i<size;i++){
            while(w && s[w]!=s[i]) w=pi[w-1];
            if(s[w]==s[i]) w++;
            pi[i]=w;
        }
        out<<longest()<<'\n';
    }
    return 0;
}