Pagini recente » Cod sursa (job #1901183) | Cod sursa (job #164326) | Cod sursa (job #1299282) | Cod sursa (job #2426888) | Cod sursa (job #1156014)
#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-1<s.length()){
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;
}