Cod sursa(job #2595486)

Utilizator mariamirabella2Bucur-Sabau Maria-Mirabela mariamirabella2 Data 7 aprilie 2020 19:59:27
Problema Trie Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.83 kb
#include <fstream>
#include <cstring>

using namespace std;

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

struct Trie {
	Trie *Next[26];
	int prefix,cuv;
	Trie(){
        for(short int i=0;i<26;i++)
            Next[i]=nullptr;
            prefix=0;
            cuv=0;
    }
};


Trie *rad =new Trie();

void ADD( char *x){
    Trie *aux=new Trie();
 	aux=rad;
	for (short int i=0;i<strlen(x);i++){
		if(aux->Next[x[i]-'a']==nullptr) {
			aux->Next[x[i]-'a'] = new Trie();
		}
        aux = aux->Next[x[i]-'a'];
        aux->prefix++;
		if(i == strlen(x)-1){
            aux->cuv++;
		}
	}
}
void REMOVE(  char  *x){
    Trie *aux=new Trie();
    aux=rad;
    for(short int i=0;i<strlen(x);i++){
        aux=aux->Next[x[i]-'a'];
        if(aux==nullptr) {
			return;
        }
        aux->prefix--;
		if(i == strlen(x)-1){
            aux->cuv--;
        }
    }
}
int NUMAR(  char *x){
    Trie *aux=new Trie();
    aux=rad;
    for(short int i=0;i<strlen(x);i++){
        aux=aux->Next[x[i]-'a'];
        if(aux==nullptr){
            return 0;
        }
        if(i==strlen(x)-1){
            return aux->cuv;
        }
    }

}
int PREFIX(  char *x){
    Trie *aux=new Trie();
    aux=rad;
    int lung=0;
    for(short int i=0;i<strlen(x);i++){
        if(aux->Next[x[i]-'a']==nullptr){
            return lung;
        }
        aux=aux->Next[x[i]-'a'];
        if(aux->prefix>0){
            lung++;
        }
    }
    return lung;
}
int main()
{
    short int n;
    char s[21];
    while(cin>>n){
       cin>>s;
        if(n==0){
            ADD(s);
        }
        if(n==1){
            REMOVE(s);
        }
        if(n==2){
            cout<<NUMAR(s)<<'\n';
        }
        if(n==3){
            cout<<PREFIX(s)<<'\n';
        }
    }
    return 0;
}