Cod sursa(job #3351783)

Utilizator Andreea3425Diaconu Andreea Andreea3425 Data 21 aprilie 2026 12:12:49
Problema Trie Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.35 kb
#include <bits/stdc++.h>

using namespace std;

struct Nod{
	int pre,en;
	Nod *next[26];

	Nod(){
		pre=en=0;
		memset(next, 0, sizeof(next));
	}
};

Nod *t=new Nod;

void ins(Nod *i, char *c){
	if (*c=='\n'){
		i->pre++;
		return;
	}

	if (i->next[*c-'a']==0){
		i->next[*c-'a']=new Nod;
		i->en++;
	}

	ins(i->next[*c-'a'], c+1);
}

int eras(Nod *i, char *c){
	if (*c=='\n')
		i->pre--;
	else if (eras(i->next[*c-'a'], c+1)){
			i->next[*c-'a']=0;
			i->en--;
		}

	if (i->pre==0 && i->en==0 && i!=t){
		delete i;
		return 1;
	}
	return 0;
}

int que(Nod *i, char *c){
	if (*c=='\n')
		return i->pre;

	if (i->next[*c-'a'])
		return que(i->next[*c-'a'], c+1);
	return 0;
}

int pre(Nod *i, char *c, int k){
	if (*c=='\n' || i->next[*c-'a']==0)
		return k;
	return pre(i->next[*c-'a'], c+1, k+1);
}

int main()
{
    ifstream cin ("trie.in");
    ofstream cout ("trie.out");

	char v[32];

	fgets(v, 32, stdin);

	while (!feof(stdin)){
        if (v[0]=='0'){
            ins(t, v+2);
            break;
        }else if (v[0]=='1'){
            eras(t, v+2);
            break;
        }else if (v[0]=='2'){
            cout << que(t, v+2) << '\n';
            break;
        }else{
            cout << pre(t, v+2, 0) << '\n';
            break;
        }

		fgets(v, 32, stdin);
	}
	return 0;
}