Pagini recente » Rating Sorin Petcu (sorineatza) | Cod sursa (job #3175083) | Cod sursa (job #1802261) | Cod sursa (job #2856770) | Cod sursa (job #1553518)
#include <bits/stdc++.h>
using namespace std;
const int lun=26;
struct Trie
{
int val,sons;
Trie *son[lun];
Trie()
{
int i;
val=0;
sons=0;
for(i=0; i<lun; ++i)son[i]=NULL;
}
};
Trie *radacina;
string st;
int ce;
void Unu(Trie *nod,int p)
{
if(p==st.size())
{
nod->val++;
return ;
}
int ind=st[p]-'a';
if(nod->son[ind]==NULL)
nod->son[ind]=new Trie,nod->sons++;
Unu(nod->son[ind],p+1);
}
void Doi(Trie *nod,int p)
{
if(p==st.size())
{
nod->val--;
return ;
}
int ind=st[p]-'a';
Doi(nod->son[ind],p+1);
if(nod->son[ind]->val==0&&nod->son[ind]->sons==0)nod->son[ind]=NULL,nod->sons--;
}
int Trei(Trie *nod,int p)
{
if(p==st.size())return nod->val;
int ind=st[p]-'a';
if(nod->son[ind]==NULL)return 0;
return Trei(nod->son[ind],p+1);
}
int Patru(Trie *nod, int p)
{
int ind=st[p]-'a';
if(p==st.size()||nod->son[ind]==NULL)return p;
return Patru(nod->son[ind],p+1);
}
int main()
{
// freopen("trie.in","r",stdin);
ifstream f ("trie.in");
ofstream g ("trie.out");
radacina=new Trie;
while(f>>ce>>st)
{
if(ce==0)Unu(radacina,0);
else if(ce==1)Doi(radacina,0);
else if(ce==2)g<<Trei(radacina,0)<<'\n';
else g<<Patru(radacina,0)<<'\n';
}
return 0;
}