Pagini recente » Cod sursa (job #1812833) | Cod sursa (job #760530) | Clasament battlestar_galactica | Cod sursa (job #2495100) | Cod sursa (job #430655)
Cod sursa(job #430655)
#include<stdio.h>
#include<string.h>
struct trie
{
int cnt,nrfii;
trie *fiu[26];
trie()
{
nrfii=cnt=0;
memset(fiu,0,sizeof(fiu));
}
};
trie *T=new trie;
char S[25];
void ins(trie *nod,char *s)
{
int aux=(int)*s-'a';
if (*s=='\n')
{
nod->cnt++;
return ;
}
if (nod->fiu[aux]==0)
{
nod->fiu[aux]=new trie;
nod->nrfii++;
}
ins(nod->fiu[aux],s+1);
}
int del(trie *nod,char *s)
{
int aux=(int)*s-'a';
if (*s=='\n')
nod->cnt--;
else
if (del(nod->fiu[aux],s+1))
{
nod->nrfii--;
}
if(nod->nrfii==0 && nod!=T && nod->cnt==0)
{
delete nod;
return 1;
}
return 0;
}
int que(trie *nod,char *s)
{
int aux=(int)*s-'a';
if (*s=='\n')
return nod->cnt;
if (nod->fiu[aux])
return que(nod->fiu[aux],s+1);
return 0;
}
int pre(trie *nod,char *s,int k)
{
int aux=(int)*s-'a';
if (*s=='\n' || !nod->fiu[aux])
return k;
return pre(nod->fiu[aux],s+1,k+1);
}
int main()
{
freopen("trie.in","r",stdin);
freopen("trie.out","w",stdout);
fgets(S,25,stdin);
while(!feof(stdin))
{
if (S[0]=='0')
ins(T,S+2);
else if (S[0]=='1')
del(T,S+2);
else if (S[0]=='2')
printf("%d\n",que(T,S+2));
else if(S[0]=='3')
printf("%d\n",pre(T,S+2,0));
fgets(S,25,stdin);
}
return 0;
}