Cod sursa(job #1156012)

Utilizator teoionescuIonescu Teodor teoionescu Data 27 martie 2014 12:47:08
Problema Prefix Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include<fstream>
#include<cstring>
#include<string>
using namespace std;
ifstream in("prefix.in");
ofstream out("prefix.out");
const int Nmax = 1000001;
int T,pi[Nmax];
string s;
int longest(){
    int len=-1;
    for(int i=0;i<s.length();i++){
        int pos=i+1;
        if(pos%2==0) if(pi[i]==pos/2) len=pos/2;
    }
    if(len==-1) return 0;
    int pos=0,best=0;
    while(pi[pos+len-1]>=best){
        pos+=len;
        best+=len;
    }
    return best;
}
int main(){
    in>>T;
    for(;T;--T){
        in>>s;
        memset(pi,0,sizeof(pi));
        int w=0;
        for(int i=1;i<s.length();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;
}