Pagini recente » Cod sursa (job #3165786) | Cod sursa (job #11011) | Cod sursa (job #1481338) | Cod sursa (job #3197290) | Cod sursa (job #2532819)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
char s[21];
int op;
int nr;
struct trie
{
int val,nr;
trie *fii[26];
};
trie *t=new trie();
void adauga(trie *poz, char *s)
{
poz->nr++;
if(*s=='\0')
{
poz->val++;
return;
}
if(poz->fii[*s-'a']==NULL)
{
poz->fii[*s-'a']=new trie();
}
adauga(poz->fii[*s-'a'],s+1);
}
void sterge(trie *poz, char *s)
{
poz->nr--;
if(*s=='\0')
{
poz->val--;
return;
}
sterge(poz->fii[*s-'a'],s+1);
}
int cauta(trie *poz, char *s)
{
if(*s=='\0')
{
return poz->val;
}
if(poz->fii[*s-'a']==NULL)
{
return 0;
}
return cauta(poz->fii[*s-'a'],s+1);
}
int cauta2(trie *poz, char *s)
{
if(*s=='\0')
{
return nr;
}
if(poz->fii[*s-'a']==NULL || poz->fii[*s-'a']->nr==0)
{
return nr;
}
else
{
nr++;
}
return cauta2(poz->fii[*s-'a'],s+1);
}
int main()
{
while(fin>>op>>s)
{
if(op==0)
{
adauga(t,s);
}
else if(op==1)
{
sterge(t,s);
}
else if(op==2)
{
fout<<cauta(t,s)<<"\n";
}
else
{
nr=0;
fout<<cauta2(t,s)<<"\n";
}
for(int i=1; i<=20; i++) s[i]='\0';
}
return 0;
}