Pagini recente » Cod sursa (job #398268) | Cod sursa (job #1415997) | Cod sursa (job #2244506) | Cod sursa (job #1953875) | Cod sursa (job #2595504)
#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->Next[x[i]-'a']->prefix--;
aux=aux->Next[x[i]-'a'];
}
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'];
}
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;
}