Cod sursa(job #2595444)

Utilizator mariamirabella2Bucur-Sabau Maria-Mirabela mariamirabella2 Data 7 aprilie 2020 19:06:42
Problema Trie Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.9 kb
#include <bits/stdc++.h>
using namespace std;

ifstream fin("trie.in");
ofstream fout("trie.out");

struct Trie {
	Trie *Next[27];
	int prefix,cuv;
	Trie(){
        for(short int i=0;i<27;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++){
            aux=aux->Next[x[i]-'a'];
        if(aux==nullptr){
            return lung;
        }
        if(aux->prefix>0){
            lung++;
        }
    }
    return lung;
}
int main()
{
    ios::sync_with_stdio(false);
    fin.tie(0);
    fout.tie(0);
    srand(time(NULL));
    short int n;
    char s[25];
    while(fin>>n){
        fin>>s;
        if(n==0){
            ADD(s);
        }
        if(n==1){
            REMOVE(s);
        }
        if(n==2){
            fout<<NUMAR(s)<<'\n';
        }
        if(n==3){
            fout<<PREFIX(s)<<'\n';
        }
    }
    return 0;
}