Pagini recente » Cod sursa (job #1926711) | Cod sursa (job #2474690) | Cod sursa (job #910236) | Cod sursa (job #2090565) | Cod sursa (job #288861)
Cod sursa(job #288861)
#include<stdio.h>
#include<string.h>
#define CH *s - 'a'
struct trie{int nrf,cnt; trie *fiu[26];
trie()
{
cnt = nrf = 0;
memset( fiu, 0, sizeof( fiu ) );
}
};
trie *T= new trie;
void insert(trie *nod,char *s)
{
if(*s == '\n')
{
nod->cnt++;
return;
}
if(! nod->fiu[CH])
{
nod->fiu[CH]= new trie;
nod->nrf++;
}
insert(nod->fiu[CH],s+1);
}
int remove(trie *nod,char *s)
{
if(*s == '\n')
nod->cnt --;
else
if (remove(nod->fiu[CH],s+1))
{
nod->fiu[CH]=0;
nod->nrf--;
}
if (nod->cnt == 0 && nod->nrf == 0 && nod!=T)
{
delete nod;
return 1;
}
return 0;
}
int query(trie *nod,char *s)
{
if(*s== '\n')
return nod->cnt;
if(nod->fiu[CH])
return(query(nod->fiu[CH],s+1));
return 0;
}
int prefix(trie *nod,char *s,int level)
{
if(*s=='\n' || !nod->fiu[CH])
return level;
return prefix(nod->fiu[CH],s+1,level+1);
}
int main(void)
{
freopen("trie.in","r",stdin);
freopen("trie.out","w",stdout);
char s[32];
fgets(s,32,stdin);
while(!feof(stdin))
{
if(s[0]=='0')
insert(T,s+2);
if(s[0]=='1')
remove(T,s+2);
if(s[0]=='2')
printf("%d\n", query(T,s+2));
if(s[0]=='3')
printf("%d\n", prefix(T,s+2,0));
fgets(s,32,stdin);
}
return 0;
}