Cod sursa(job #2595499)

Utilizator mariamirabella2Bucur-Sabau Maria-Mirabela mariamirabella2 Data 7 aprilie 2020 20:28:36
Problema Trie Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.84 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=rad;
    for(int i = 0;i <strlen(x);i++){
        if(aux->Next[x[i]-'a']==nullptr)
                aux->Next[x[i]-'a']=new Trie();
            aux->Next[x[i]-'a']->prefix++;
            aux = aux->Next[x[i]-'a'];
        }
    aux->cuv++;
}
void REMOVE(  char  *x){
    Trie *aux=rad;
    for(short int i=0;i<strlen(x);i++){
        if(aux->Next[x[i]-'a']==nullptr) {
			return;
        }
        aux=aux->Next[x[i]-'a'];
        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++){
        if(aux->Next[x[i]-'a']==nullptr){
            return 0;
        }
        aux=aux->Next[x[i]-'a'];
        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;
}