Pagini recente » Cod sursa (job #1644606) | Cod sursa (job #115720) | Cod sursa (job #1769258) | Cod sursa (job #3149602) | Cod sursa (job #897955)
Cod sursa(job #897955)
#include<stdio.h>
#include<string.h>
int n,m,k;
char x[30];
struct trie{
int nr,nrf;
trie *f[26];
trie()
{
nr=nrf=0;
memset(f,0,sizeof(f));
}
};
trie *r;
void adaug()
{
trie *q;
int i;
q=r;
for(i=0;i<m;i++)
{
if(q->f[x[i]-'a']==0)
{
q->nrf++;
q->f[x[i]-'a']=new trie();
}
q=q->f[x[i]-'a'];
}
q->nr++;
}
int numar()
{
trie *q;
int i;
q=r;
for(i=0;i<m;i++)
if(q->f[x[i]-'a']==0)
return 0;
else
q=q->f[x[i]-'a'];
return q->nr;
}
int prefix()
{
trie *q;
int i;
q=r;
for(i=0;i<m;i++)
if(q->f[x[i]-'a']==0)
return i;
else
q=q->f[x[i]-'a'];
return m;
}
void sterge(trie *q,int i)
{
if(i==m)
q->nr--;
else
{
sterge(q->f[x[i]-'a'],i+1);
if(q->f[x[i]-'a']->nr==0 && q->f[x[i]-'a']->nrf==0)
{
delete q->f[x[i]-'a'];
q->f[x[i]-'a']=0;
q->nrf--;
}
}
}
int main()
{
FILE *f,*g;
f=fopen("trie.in","r");
g=fopen("trie.out","w");
r=new trie();
while(!feof(f))
{
fscanf(f,"%d %s",&k,x);
if(feof(f))
break;
m=strlen(x);
if(k==0)
adaug();
if(k==1)
sterge(r,0);
if(k==2)
fprintf(g,"%d\n",numar());
if(k==3)
fprintf(g,"%d\n",prefix());
}
fclose(f);
fclose(g);
return 0;
}