Pagini recente » Cod sursa (job #1560841) | Cod sursa (job #477244) | Cod sursa (job #2123479) | Cod sursa (job #2283644) | Cod sursa (job #1156021)
#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];
char s[Nmax];
int longest(){
int len=-1;
for(int i=0;i<strlen(s);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-1<strlen(s)){
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;
for(int i=1;i<strlen(s);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;
}