Pagini recente » Cod sursa (job #677495) | Cod sursa (job #2648819) | Cod sursa (job #2730633) | Cod sursa (job #1934166) | Cod sursa (job #341291)
Cod sursa(job #341291)
#include <cstdio>
#include <cstring>
#define N 1000001
struct trie
{
short int cuv,fii;
trie *L[10];
trie()
{
cuv=fii=0;
memset(L,0,sizeof(L));
}
} *T;
char S[20];
void insert(trie *t, char *c)
{
if (*c=='\n') t->cuv=1;
else
{
int ch=*c-'0';
if (!t->L[ch])
{
t->L[ch]=new trie;
t->fii++;
}
insert(t->L[ch],c+1);
}
}
int exist(trie *t, char *c)
{
if (*c=='\n') return t->cuv;
else
if (t->L[*c-'0']) return exist(t->L[*c-'0'],c+1);
else return 0;
}
int erase(trie * &t, char *c)
{
if (*c=='\n') t->cuv=0;
else
if (erase(t->L[*c-'0'],c+1))
{
t->fii--;
t->L[*c-'0']=0;
}
if (!t->cuv && !t->fii && t!=T)
{
delete t;
return 1;
}
else return 0;
}
int main()
{
T=new trie;
int n;
freopen("hashuri.in","r",stdin);
freopen("hashuri.out","w",stdout);
scanf("%d\n",&n);
while (n--)
{
fgets(S,20,stdin);
switch (S[0])
{
case '1':insert(T,S+2); break;
case '2':if (exist(T,S+2)) erase(T,S+2); break;
case '3':printf("%d\n",exist(T,S+2)); break;
}
}
return 0;
}