Pagini recente » Cod sursa (job #1320622) | Cod sursa (job #3128493) | Cod sursa (job #2570608) | Cod sursa (job #1212783) | Cod sursa (job #1316604)
#include <cstdio>
#include <cstring>
FILE* in=fopen("trie.in","r");
FILE* out=fopen("trie.out","w");
const int Q=22,W=100006;
struct nod{
int term,part;
char *read[26];
int size[26];
nod *to[26];
nod()
{
for(int i=0; i<26; i++)
{
read[i]=NULL;
to[i]=NULL;
size[i]=0;
}
}
} ;
char c[W][Q];
nod* add(nod *p,char v[], int sz)
{
if(p==NULL)
{
p=new nod;
}
if(sz==0)
{
p->term++;
return p;
}
char c=v[0]-'a';
int cm=0;
if(p->to[c]==NULL)
{
p->read[c]=v;
p->size[c]=sz;
p->to[c]=add(p->to[c],v+sz,0);
}
else
{
for(cm=1; p->read[c][cm]==v[cm] && cm<=sz && cm<=p->size[c]; cm++);
cm--;
nod *aux,*aux2;
if(cm==p->size[c])
{
p->to[c]=add(p->to[c],v+cm,sz-cm);
}
else
{
aux=p->to[c];
aux2=add(p->to[c],p->read[c]+cm,p->size[c]-cm);
p->size[c]=cm;
add(p->to[c],v+cm,sz-cm);
}
}
p->part++;
return p;
}
int main()
{
int x,k=0;
nod *start=new nod;
int sz;
while(fscanf(in,"%d ",&x)==1)
{
k++;
fscanf(in,"%s\n",c[k]);
sz=strlen(c[k]);
if(x==0)
add(start,c[k],sz-1);
}
return 0;
}