Pagini recente » Cod sursa (job #2613329) | Cod sursa (job #2988996) | Cod sursa (job #2512069) | Cod sursa (job #2163257) | Cod sursa (job #1147212)
#include <cstdio>
#define lit *cuvant-'a'
using namespace std;
class Trie{
private:
int nrfii,cuv;
public:
Trie *fii[26];
Trie(){
for(int i = 0; i < 26; ++i)
fii[i] = NULL;
nrfii = cuv = 0;
}
void Insert(char *cuvant)
{
if(!*cuvant){++cuv;return;}
if(!fii[lit]){fii[lit] = new Trie; ++nrfii;}
fii[lit]->Insert(cuvant+1);
}
void Delete(char *cuvant)
{
if(!*cuvant){
--cuv;
return;
}
fii[lit]->Delete(cuvant+1);
if(fii[lit]->cuv == 0 && fii[lit]->nrfii == 0)
{
nrfii--;
delete fii[lit];
fii[lit] = NULL;
}
}
int Count(char *cuvant)
{
if(!*cuvant) return cuv;
if(fii[lit]) return fii[lit]->Count(cuvant+1);
return 0;
}
int Prefix(char *cuvant)
{
if(!fii[lit]) return 0;
if(*cuvant) return 1 + fii[lit]->Prefix(cuvant+1);
return 0;
}
}T;
int main()
{
freopen("trie.in","r",stdin);
freopen("trie.out","w",stdout);
int tip;
char word[30];
while(!feof(stdin))
{
scanf("%d %s\n",&tip,&word);
if(tip == 0)T.Insert(word);
if(tip == 1)T.Delete(word);
if(tip == 2)printf("%d\n",T.Count(word));
if(tip == 3)printf("%d\n",T.Prefix(word));
}
return 0;
}