Cod sursa(job #1148583)

Utilizator Claudiu95Vartolomei Alexandru Claudiu Claudiu95 Data 20 martie 2014 21:49:36
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#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;

}