Pagini recente » Cod sursa (job #2459058) | Cod sursa (job #2717736) | Cod sursa (job #1584737) | Cod sursa (job #2615937) | Cod sursa (job #1201168)
#include<cstdio>
const int N=1000000;
int prefix[N+1];
char s[N+1];
FILE*in,*out;
int t,n,max;
void scan(){
fscanf(in,"%d\n",&t);
}
void init(){
in=fopen("prefix.in","r");
out=fopen("prefix.out","w");
scan();
}
void closeFiles(){
fclose(in);
fclose(out);
}
void scanTest(){
fgets(s,N+1,in);
}
void setPrefix(){
int i,k=0;
prefix[1]=0;
for(i=2;i<=n;i++){
while(k>0&&s[i]!=s[k+1])
k=prefix[k];
if(s[i]==s[k+1])
k++;
prefix[i]=k;
}
}
void solve(){
int i,k=0,pLenght=0;
bool f=true;
max=0;
setPrefix();
for(i=1;i<=n;i++){
if(s[i]==s[k+1]&&i!=k+1){
k++;
if(f&&k==1)
pLenght=i-1;
if(k==pLenght){
k=0;
if(i>max)
max=i;
}
f=false;
}
else{
k=0;
f=true;
if(s[i]==s[1]&&i!=1){
k=1;
pLenght=i-1;
if(i==2)
if(2>max)
max=2;
}
}
}
fprintf(out,"%d\n",max);
}
void shift(){
int i;
for(i=n;i>=1;i--)
s[i]=s[i-1];
}
int stringLenght(char s[N+1]){
int i=0;
while(s[i]!='\0')
i++;
return i;
}
void initTest(){
scanTest();
n=stringLenght(s);
shift();
}
int main(){
init();
while(t>0){
t--;
initTest();
solve();
}
closeFiles();
return 0;
}