Pagini recente » Cod sursa (job #2768198) | Cod sursa (job #413161) | Cod sursa (job #2075013) | Cod sursa (job #2809260) | Cod sursa (job #322179)
Cod sursa(job #322179)
#include<stdio.h>
#include<string.h>
using namespace std;
struct tnod
{
int c,nr;
tnod*q[30];
tnod()
{
c=nr=0;
memset(q,0,sizeof(q));
}
};
tnod*t=new tnod;
void ins(tnod*,char*);
int del(tnod*,char*);
int que(tnod*,char*);
int pre(tnod*,char*,int);
int main()
{
char l[30];
freopen("trie.in","r",stdin);
freopen("trie.out","w",stdout);
fgets(l,30,stdin);
while(!feof(stdin))
{
switch(l[0])
{
case '0': ins(t,l+2);break;
case '1': del(t,l+2);break;
case '2': printf("%d\n",que(t,l+2));break;
case '3': printf("%d\n",pre(t,l+2,0));break;
}
fgets(l,30,stdin);
}
return 0;
}
void ins(tnod*p,char*s)
{
if(*s=='\n')
{
p->c++;
return;
}
if(p->q[*s-'a']==0)
{
p->q[*s-'a']=new tnod;
p->nr++;
}
ins(p->q[*s-'a'],s+1);
}
int del(tnod*p,char*s)
{
if(*s=='\n')
p->c--;
else
if(del(p->q[*s-'a'],s+1))
{
p->q[*s-'a']=0;
p->nr--;
}
if(p->c==0&&p->nr==0&&p!=t)
{
delete p;
return 1;
}
return 0;
}
int que(tnod*p,char*s)
{
if(*s=='\n')
return p->c;
if(p->q[*s-'a'])
return que(p->q[*s-'a'],s+1);
return 0;
}
int pre(tnod*p,char*s,int k)
{
if(*s=='\n'||p->q[*s-'a']==0)
return k;
return pre(p->q[*s-'a'],s+1,k+1);
}