Pagini recente » Istoria paginii utilizator/uaic_elnazli_morosac_rares | Cod sursa (job #2326291) | Cod sursa (job #2490224) | Cod sursa (job #1473795) | Cod sursa (job #2595439)
#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(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 (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(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(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(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));
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;
}