Pagini recente » Cod sursa (job #1090885) | Cod sursa (job #1359259) | Cod sursa (job #2225111) | Rating Zugravu Madalina (ZugravuMadalina) | Cod sursa (job #2595475)
#include <fstream>
#include <cstring>
using namespace std;
ifstream cin("trie.in");
fstream 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++){
aux=aux->Next[x[i]-'a'];
if(aux==nullptr){
return lung;
}
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;
}