Pagini recente » Cod sursa (job #2505843) | Cod sursa (job #2339417) | Cod sursa (job #1513809) | Cod sursa (job #2123400) | Cod sursa (job #948896)
Cod sursa(job #948896)
#include<fstream>
#include<cstring>
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
const int MAXN=22;
const int MAX_ALPHA=27;
struct trie_node
{
int prefix_count;
int word_count;
trie_node* children[MAX_ALPHA];
};
trie_node *head,*aux;
char word[MAXN];
int lg,i,j,opt,lprefix,gol;
int main()
{
head=new trie_node();
while (!fin.eof())
{
fin>>opt>>word;
lg=strlen(word);
if (!lg)
break;
switch (opt)
{
case 0: //insert
aux=head;
for (i=0;i<lg;++i)
{
if (aux->children[word[i]-'a']==NULL)
{
aux->children[word[i]-'a']=new trie_node();
}
++(aux->prefix_count);
aux=aux->children[word[i]-'a'];
}
++(aux->prefix_count);
++(aux->word_count);
break;
case 1: //delete
aux=head;
for (i=0;i<lg;++i)
{
--(aux->prefix_count);
aux=aux->children[word[i]-'a'];
}
--(aux->prefix_count);
--(aux->word_count);
break;
case 2: //print
gol=0;
aux=head;
for (i=0;i<lg;++i)
{
if (aux->children[word[i]-'a']==NULL)
{
gol=1;
break;
}
aux=aux->children[word[i]-'a'];
}
if (gol)
fout<<0<<'\n';
else
fout<<aux->word_count<<'\n';
break;
case 3:
lprefix=0;
aux=head;
for (i=0;i<lg;++i)
{
if (aux->children[word[i]-'a']!=NULL)
{
aux=aux->children[word[i]-'a'];
if (aux->prefix_count!=0)
{
++lprefix;
}
}
else
break;
}
fout<<lprefix<<'\n';
break;
}
}
fin.close();
fout.close();
return 0;
}