Pagini recente » Cod sursa (job #2722070) | Cod sursa (job #2514752) | Cod sursa (job #2480497) | Cod sursa (job #429153) | Cod sursa (job #1517537)
#include<cstdio>
#include<cstring>
#define CH (*s-'a')
using namespace std;
class trie
{
public :
int cnt,nrfii;
trie *fiu[26];
trie()
{
cnt=nrfii=0;
memset(fiu,NULL,sizeof(fiu));
}
void ins(char *s)
{
if(*s==NULL)
{
this->cnt++;
return;
}
else
{
if(this->fiu[CH]==NULL)
{
this->fiu[CH] = new trie;
this->nrfii++;
}
this->fiu[CH]->ins(s+1);
}
}
bool del (char *s)
{
if(*s==NULL)
{
this->cnt--;
}
else if( this -> fiu[CH]->del(s+1))
{
delete this-> fiu[CH];
this -> fiu[CH]=0;
this-> nrfii --;
}
if(this->cnt ==0 && this->nrfii ==0)
{
return 1;
}
return 0;
}
int que(char *s)
{
if(*s == NULL)
return this->cnt;
else
{
if(this -> fiu[CH])
return this->fiu[CH]->que(s+1);
else
return 0;
}
}
int pre(char *s , int k)
{
if(*s == NULL || this->fiu[CH]==0)
return k;
return this->fiu[CH]->pre(s+1,k+1);
}
void printer()
{
int i;
for(i=0; i<26; ++i)
if(this->fiu[i])
{
printf("%c",i+'a');
this->fiu[i]->printer();
}
printf("\n");
}
};
trie *root = new trie;
int main()
{
FILE *fin,*fout;
freopen("trie.in", "r", stdin);
freopen("trie.out","w",stdout);
char s[21];
int q;
while(scanf("%d",&q)!=EOF)
{
scanf("%s",s);
switch (q)
{
case 0:
root->ins(s);
break;
case 1:
root->del(s);
break;
case 2:
printf("%d\n",root->que(s) );
break;
case 3:
printf("%d\n",root->pre(s,0));
break;
}
}
return 0;
}