Pagini recente » Cod sursa (job #2322906) | Cod sursa (job #2466868) | Cod sursa (job #1800828) | Cod sursa (job #1779845) | Cod sursa (job #714827)
Cod sursa(job #714827)
#include<stdio.h>
#include<cstring>
using namespace std;
FILE*f=fopen("trie.in","r");
FILE*g=fopen("trie.out","w");
int sol,l;
char v[25];
struct trie
{
int nr,nrfii;
trie *son[27];
trie()
{
nr=nrfii=0;
memset(son,0,sizeof(son));
}
} *p=new trie;
void insert(trie *nod,char *q)
{
if(*q=='\n')
{
++nod->nr;
return ;
}
if(nod->son[*q-'a'+1]==NULL)
{
nod->son[*q-'a'+1]=new trie;
++nod->nrfii;
}
insert(nod->son[*q-'a'+1],q+1);
}
int erase(trie *nod,char *q)
{
if(*q=='\n')
--nod->nr;
else if(nod->son[*q-'a'+1])
if(erase(nod->son[*q-'a'+1],q+1))
{
--nod->nrfii;
nod->son[*q-'a'+1]=NULL;
}
if(nod->nr==0&&nod->nrfii==0&&nod!=p)
{
delete nod;
return 1;
}
return 0;
}
void nrap(trie *nod,char *q)
{
if(*q=='\n')
{
sol=nod->nr;
return ;
}
if(nod->son[*q-'a'+1])
nrap(nod->son[*q-'a'+1],q+1);
}
void pref(trie *nod,char *q)
{
++l;
if(*q=='\n')
return ;
if(nod->son[*q-'a'+1]!=NULL)
pref(nod->son[*q-'a'+1],q+1);
}
int main()
{
while(fgets(v,25,f))
{
if(v[0]=='0')
insert(p,v+2);
else if(v[0]=='1')
erase(p,v+2);
else if(v[0]=='2')
{
sol=0;
nrap(p,v+2);
fprintf(g,"%d\n",sol);
}
else
{
l=-1;
pref(p,v+2);
fprintf(g,"%d\n",l);
}
}
fclose(f);
fclose(g);
return 0;
}