Pagini recente » Cod sursa (job #688898) | Cod sursa (job #2383235) | Cod sursa (job #1889301) | Cod sursa (job #588861) | Cod sursa (job #1148583)
#include<cstdio>
#include<cstdlib>
#include<ctime>
#include<cstring>
using namespace std;
FILE *fin;
struct nod { int inf;nod *F[2];nod(){inf=0;F[0]=F[1]=0;}};
nod *root,*q,*aux;
int pow,mask,lg,i,j,sol,start;
char a[50010],*p;
int main()
{
freopen("subsecvente.in","r",stdin);
freopen("subsecvente.out","w",stdout);
root=new nod;pow=mask=1;
int n; scanf("%d\n", &n);
scanf("%s",a+1);lg=strlen(a+1);
for(i=1;i<=lg;i++)
for(j=0,p=a+i,q=root;j<60&&*p;j++,p++)
{
if(!q->F[*p-'a']){aux=new nod;aux->inf=1;q->F[*p-'a']=aux;}
q=q->F[*p-'a'];
}
for(;scanf("%s",a+1)+1;)
{
pow<<=1;mask|=pow;sol=0;lg=strlen(a+1);
for(i=1;i<=lg;i++)
for(j=0,p=a+i,q=root;j<60&&*p;j++,p++)
{
if(!q->F[*p-'a'])break;
q=q->F[*p-'a'];
q->inf|=pow;
if(q->inf!=mask)break;
if(j+1>sol){start=i;sol=j+1;}
}
if(!sol)break;
}
printf("%d\n",sol);
//a[start+sol]=0;printf("%s",a+start);
return 0;
}