Pagini recente » Cod sursa (job #2761760) | Cod sursa (job #3288355) | Cod sursa (job #2389380) | Cod sursa (job #1197699) | Cod sursa (job #1665202)
#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;
aux=root;
for(i=0; i<w.length(); ++i)
{
if(aux->a[w[i]-'a']==NULL || aux->nrcuvt==0) break;
else aux=aux->a[w[i]-'a'];
}
return i;
}
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;
}