Pagini recente » Cod sursa (job #1867499) | Cod sursa (job #191998) | Cod sursa (job #2532321) | Cod sursa (job #1590444) | Cod sursa (job #1379973)
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
char data[32];
int tipOp;
struct Trie
{
int nrfii,cnt;
Trie *fiu[26];
Trie()
{
nrfii=cnt=0;
memset(fiu,0,sizeof(fiu));
}
};
Trie *T = new Trie();
void ins(Trie *nod,char *s)
{
if (*s=='\n')
{
nod->cnt++;
return;
}
if (nod->fiu[*s-'a']==0)
{
nod->fiu[*s-'a']=new Trie();
nod->nrfii++;
}
ins(nod->fiu[*s-'a'],s+1);
}
bool del(Trie *nod,char *s)
{
if (*s=='\n')
nod->cnt--;
else if (del(nod->fiu[*s-'a'],s+1))
{
nod->fiu[*s-'a']=0;
nod->nrfii--;
}
if (nod->cnt==0 && nod->nrfii==0 && nod!=T)
{
delete nod;
return true;
}
return false;
}
int que(Trie *nod,char *s)
{
if (*s=='\n')
return nod->cnt;
if (nod->fiu[*s-'a'])
return que(nod->fiu[*s-'a'],s+1);
return 0;
}
int pre(Trie *nod,char *s,int k)
{
if (*s=='\n' || nod->fiu[*s-'a']==0) return k;
pre(nod->fiu[*s-'a'],s+1,k+1);
}
int main()
{
freopen("trie.in","r",stdin);
freopen("trie.out","w",stdout);
fgets(data,32,stdin);
while (!feof(stdin))
{
if (data[0]=='0') ins(T,data+2);
else if (data[0]=='1') del(T,data+2);
else if (data[0]=='2') printf("%d\n",que(T,data+2));
else printf("%d\n",pre(T,data+2,0));
fgets(data,32,stdin);
}
return 0;
}