Pagini recente » Cod sursa (job #903848) | Cod sursa (job #1949973) | Cod sursa (job #2601805) | Cod sursa (job #977633) | Cod sursa (job #2089289)
#include<iostream>
#include<string>
#include<fstream>
#include<cmath>
#include<cstring>
using namespace std;
fstream fin("trie.in",ios::in), fout("trie.out",ios::out);
char s[50];
struct trie
{
int cnt,ap;
trie *fiu[27];
trie()
{
cnt=ap=0;
memset(fiu,0,sizeof(fiu));
}
};
void add_trie(char *s, trie *t)
{
t->ap++;
if(*s == NULL)
{
t->cnt++;
return ;
}
int delta= *s-'a';
if(t->fiu[delta]==NULL)
{
t->fiu[delta]=new trie();
}
add_trie(s+1,t->fiu[delta]);
}
void delete_trie(char *s, trie *t)
{
t->ap--;
if(*s == NULL)
{
t->cnt--;
return ;
}
int delta= *s-'a';
delete_trie(s+1,t->fiu[delta]);
}
int find_trie(trie *nod, char *s)
{
if(*s == NULL) return nod->cnt;
int delta=*s-'a';
if(nod->fiu[delta] == NULL) return 0;
return find_trie(nod->fiu[delta],s+1);
}
int search_trie(char *s, trie *nod)
{
if(*s == NULL) return 1;
int delta = *s-'a';
if(nod->ap == 0) return 0;
if(nod->fiu[delta]==NULL)
{
return 1;
}
return (search_trie(s+1,nod->fiu[delta])+1);
}
int main()
{
int op;
trie *root = new trie;
while(fin>>op)
{
fin>>s;
if(op==0)
{
add_trie(s,root);
}
if(op==1) //delete
{
delete_trie(s, root);
}
if(op==2) //find
{
fout<<find_trie(root, s)<<"\n";
}
if(op==3)
{
fout<<search_trie(s, root)-1<<"\n";
}
}
}