Pagini recente » Cod sursa (job #1002518) | Cod sursa (job #1405616) | Cod sursa (job #1919659) | Cod sursa (job #1612258) | Cod sursa (job #1665214)
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
int op;
string w;
struct trie{
int nrcuvt;
int nrcuvf;
trie *a[26];
trie(){
nrcuvt=0;
nrcuvf=0;
memset(a,0,sizeof(a));
}
};
trie *root;
trie *aux;
void insert(string w)
{
aux=root;
aux->nrcuvt++;
for(int i=0;i<w.length();++i)
{
if((aux->a[w[i]-'a'])==NULL)
aux->a[w[i]-'a']=new trie();
aux=aux->a[w[i]-'a'];
++aux->nrcuvt;
}
++aux->nrcuvf;
}
void erase(string w)
{
aux=root;
--aux->nrcuvt;
for(int i=0; i<w.length(); ++i)
{
//if (aux->a[w[i]-'a']==NULL) return;
aux=aux->a[w[i]-'a'];
--aux->nrcuvt;
}
--aux->nrcuvf;
}
int prefix(string w)
{
int i=0;
int rez=0;
aux=root;
for(i=0; i<w.length(); ++i)
{
if(aux->a[w[i]-'a']==NULL || aux->a[w[i]-'a']->nrcuvt==0 ) break;
else { aux=aux->a[w[i]-'a']; ++rez; }
}
return rez;
}
int nrapp(string w)
{
int i=0;
aux=root;
for(i=0; i<w.length(); ++i)
{
if(aux->a[w[i]-'a']==NULL) return 0;
else aux=aux->a[w[i]-'a'];
}
return aux->nrcuvf;
}
int main()
{
root=new trie();
while(fin>>op)
{
fin>>w;
if(op==0) insert(w);
else if(op==1) erase(w);
else if(op==2) fout<<nrapp(w)<<"\n";
else fout<<prefix(w)<<"\n";
}
return 0;
}