Pagini recente » Cod sursa (job #2271588) | Cod sursa (job #2569094) | Cod sursa (job #1051555) | Cod sursa (job #1013573) | Cod sursa (job #430658)
Cod sursa(job #430658)
#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[32];
void ins(Trie *nod,char *s)
{
int Ch=(int)*s-'a';
if (*s=='\n')
{
nod->cnt++;
return ;
}
if (nod->fiu[Ch]==0)
{
nod->fiu[Ch]=new Trie;
nod->nrfii++;
}
ins(nod->fiu[Ch],s+1);
}
int del(Trie *nod,char *s)
{
int Ch=(int)*s-'a';
if (*s=='\n')
nod->cnt--;
else
if (del(nod->fiu[Ch],s+1))
{
nod->nrfii--;
nod->fiu[Ch]=0;
}
if(nod->nrfii==0 && nod!=T && nod->cnt==0)
{
delete nod;
return 1;
}
return 0;
}
int que(Trie *nod,char *s)
{
int Ch=(int)*s-'a';
if (*s=='\n')
return nod->cnt;
if (nod->fiu[Ch])
return que(nod->fiu[Ch],s+1);
return 0;
}
int pre(Trie *nod,char *s,int k)
{
int Ch=(int)*s-'a';
if (*s=='\n' || !nod->fiu[Ch])
return k;
return pre(nod->fiu[Ch],s+1,k+1);
}
int main()
{
freopen("trie.in","r",stdin);
freopen("trie.out","w",stdout);
fgets(S,32,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,32,stdin);
}
return 0;
}