Pagini recente » Cod sursa (job #1973070) | Cod sursa (job #2251179) | Cod sursa (job #2477502) | Cod sursa (job #2482651) | Cod sursa (job #903563)
Cod sursa(job #903563)
#include<stdio.h>
#include<string.h>
using namespace std;
struct trie
{
int nr,nrf;
trie *f[28];
trie()
{
nr=nrf=0;
memset(f,0,sizeof(f));
}
};
trie *r;
int n,k;
char v[25];
void add()
{
trie *q;
int i,aux;
q=r;
for(i=1;i<=n;i++)
{
aux=v[i]-'a'+1;
if(q->f[aux]==0)
{
q->f[aux]=new trie();
q->nrf++;
}
q=q->f[aux];
}
q->nr++;
}
void del(trie *q,int k)
{
int aux=v[k+1]-'a'+1;
if(k==n) {q->nr--; return;}
del(q->f[aux],k+1);
if(q->f[aux]->nrf==0 && q->f[aux]->nr==0)
{
delete q->f[aux];
q->f[aux]=0;
q->nrf--;
}
}
int count()
{
int i,aux;
trie *q;
q=r;
for(i=1;i<=n;i++)
{
aux=v[i]-'a'+1;
if(q->f[aux]==0) return 0;
q=q->f[aux];
}
return q->nr;
}
int pref()
{
int i,aux,nrp=0;
trie *q;
q=r;
for(i=1;i<=n;i++)
{
aux=v[i]-'a'+1;
if(q->f[aux]==0) return nrp;
nrp++;
q=q->f[aux];
}
return n;
}
void cit()
{
int ok;
while(!feof(stdin))
{
scanf("%d %s",&ok,v+1);
n=strlen(v+1);
if(feof(stdin)) return;
if(ok==0) add();
else
if(ok==1) del(r,0);
else
if(ok==2) printf("%d\n",count());
else
if(ok==3) printf("%d\n",pref());
}
}
int main()
{
freopen("trie.in","r",stdin);
freopen("trie.out","w",stdout);
r=new trie();
cit();
fclose(stdin);
fclose(stdout);
return 0;
}