Pagini recente » Cod sursa (job #1503765) | Cod sursa (job #3260484) | Cod sursa (job #2926645) | Cod sursa (job #1521852) | Cod sursa (job #331313)
Cod sursa(job #331313)
#include<stdio.h>
#include<fstream>
#include<string.h>
using namespace std;
struct nod{int nr,fii;
nod *v[30];
nod()
{nr=fii=0;
memset(v,0,sizeof(v));}
} rad;
char w[25];
void insert(){
nod *p;
p=&rad;
int i;
for(i=0;w[i];++i)
{if(p->v[w[i]-'a']==0)
{p->v[w[i]-(int)'a']=new nod;
p->fii++;}
p=p->v[(int)w[i]-(int)'a'];
}
p->nr++;
}
void del(int i,nod *p){
if(!w[i]){p->nr--;return ;}
nod *q;
q=p->v[w[i]-'a'];
del(i+1,q);
if(q->fii==0&&q->nr==0)
{p->fii--;
p->v[w[i]-'a']=NULL;
delete(q);
}
}
int check(){
int i;
nod *p=&rad;
for(i=0;w[i];++i)
{if(!p->v[w[i]-'a'])return 0;
p=p->v[w[i]-'a'];}
return p->nr;
}
int show(){
int i;
nod *p=&rad;
for(i=0;w[i];++i){
if(p->v[w[i]-'a']==0)return i;
p=p->v[w[i]-'a'];}
return i;
}
void solve(){
ifstream f("trie.in");
int ok;
freopen("trie.out","w",stdout);
while(f>>ok){
f>>w;
if(ok==0)
insert();
else
if(ok==1)
del(0,&rad);
else
if(ok==2)
printf("%d\n",check());
else
printf("%d\n",show());
}
}
int main(){
solve();
return 0;
}