Pagini recente » Cod sursa (job #1480576) | Cod sursa (job #1391309) | Cod sursa (job #153862) | Cod sursa (job #2688357) | Cod sursa (job #1918627)
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
struct nod
{
int ap;
nod *F[27];
nod()
{
ap=0;
for(int i=1; i<=26; i++)
F[i]=0;
}
};
nod *root,*q,*aux,*aux2;
bool cond(nod *parametru,int lit)
{
for(int i=1; i<=26; i++)
{
if((parametru->F[i])&&(i!=lit))
return true;
}
return false;
}
int main()
{
int op;
char cuv[30];
freopen("trie.in","r",stdin);
freopen("trie.out","w",stdout);
root =new nod;
int i;
int lg,l;
for(; scanf("%d %s\n",&op,cuv+1)+1;)
{
lg=strlen(cuv+1);
if(op!=3)
{
for(i=1,q=root; i<=lg; i++)
{
if(!(q->F[*(cuv+i)-'a'+1]))
{
aux=new nod;
aux->ap=0;
q->F[*(cuv+i)-'a'+1]=aux;
}
aux2=q;
q=q->F[*(cuv+i)-'a'+1];
//cout<<*(cuv+i)<<" ";
}
//cout<<endl;
if(op==0)
q->ap+=1;
if(op==1)
{
q->ap-=1;
if(q->ap==0&&!cond(q,0))
{
aux2->F[*(cuv+lg)-'a'+1]=NULL;
delete q;
}
}
if(op==2)
{
if(q->ap<0)
printf("0\n");
else
printf("%d\n",q->ap);
}
}
else
{
q=root;
l=1;
while(l<=lg&&q->F[(*(cuv+l)-'a')+1])
{
//cout<<*(cuv+l)<<" ";
q=q->F[(*(cuv+l)-'a')+1];
l++;
}
printf("%d\n",l-1);
}
}
return 0;
}