Cod sursa(job #331313)

Utilizator ConsstantinTabacu Raul Consstantin Data 13 iulie 2009 17:55:41
Problema Trie Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#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;
}