Pagini recente » Cod sursa (job #560451) | Cod sursa (job #2397160) | Cod sursa (job #752101) | Borderou de evaluare (job #432835) | Cod sursa (job #1197017)
#include<cstdio>
using namespace std;
class TRIE
{
public:
class NOD
{
public:
int cuv,nfi;
NOD *fii[26];
NOD()
{
int i;
this->cuv=0;
this->nfi=0;
for(i=0;i<26;i++)
{
this->fii[i]=NULL;
}
}
void add(char *s)
{
if(s[0]==0)
{
this->cuv++;
}
else
{
if(this->fii[s[0]-'a']==NULL)
{
this->fii[s[0]-'a']=new NOD();
this->nfi++;
}
this->fii[s[0]-'a']->add(s+1);
}
}
int fin(char *s)
{
if(s[0]==0)
return this->cuv;
else
{
if(this->fii[s[0]-'a']==NULL)
return 0;
return this->fii[s[0]-'a']->fin(s+1);
}
}
int pref(char *s)
{
if(s[0]==0)
return 0;
else
{
if(this->fii[s[0]-'a']==NULL)
return 0;
return this->fii[s[0]-'a']->pref(s+1)+1;
}
}
void del(char *s)
{
if(s[0]==0)
{
this->cuv--;
}
else
{
this->fii[s[0]-'a']->del(s+1);
if(this->fii[s[0]-'a']->cuv==0&&this->fii[s[0]-'a']->nfi==0)
{
delete this->fii[s[0]-'a'];
this->nfi--;
this->fii[s[0]-'a']=NULL;
}
}
}
};
NOD *rad;
TRIE()
{
this->rad=new NOD();
}
void add(char *s)
{
rad->add(s);
}
void del(char *s)
{
rad->del(s);
}
int fin(char *s)
{
return rad->fin(s);
}
int pref(char *s)
{
return rad->pref(s);
}
};
TRIE t;
int main()
{
char sir[21];
int op;
freopen("trie.in","r",stdin);
freopen("trie.out","w",stdout);
while(scanf("%d ",&op)==1)
{
scanf("%s",&sir);
//printf("%d %s\n", op, sir);
switch(op)
{
case 0:t.add(sir);
break;
case 1:t.del(sir);
break;
case 2:printf("%d\n",t.fin(sir));
break;
case 3:printf("%d\n",t.pref(sir));
break;
}
}
return 0;
}