#include #include #include #include #include #include #include #include #include #include #include using namespace std; char order[10]; char input[35]; int len; typedef struct node { int value; node*next[27]; } node; void Insert(node*&temp,int cur) { if(cur==len-1) { temp->value++; return; } int k=input[cur+1]-'a'; if(temp->next[k]==NULL) { while(temp->next[k]==NULL) temp->next[k]=(node*)malloc(sizeof(node)); temp->next[k]->value=0; for(int i=0; i<26; i++) temp->next[k]->next[i]=NULL; } temp->value++; Insert(temp->next[k],cur+1); } int Delete(node*&temp,int cur) { int k=input[cur+1]-'a'; if(cur==len-2) { if(temp->next[k]==NULL) { return 0; } else { int tt=temp->next[k]->value; temp->next[k]=NULL; temp->value-=tt; return tt; } } if(temp->next[k]==NULL) { return 0; } int tt=Delete(temp->next[k],cur+1); temp->value-=tt; return tt; } bool Search(node*&temp,int cur) { if(temp==NULL) { return false; } if(cur==len-1) { if((temp->value)>0) return true; else return false; } int k=input[cur+1]-'a'; return Search(temp->next[k],cur+1); } int main() { node*p_head[27]; node head[27]; // for(int i=0; i<26; i++) { head[i].value=0; for(int j=0; j<26; j++) { head[i].next[j]=NULL; } } // for(int i=0; i<26; i++) p_head[i]=&head[i]; // int n; scanf("%d",&n); while(n--) { scanf("%s%s",order,input); len=strlen(input); if(strcmp(order,"insert")==0) { int k=input[0]-'a'; Insert(p_head[k],0); } else if(strcmp(order,"delete")==0) { int k=input[0]-'a'; if(len==1) { p_head[k]->value=0; for(int i=0;i<26;i++) p_head[k]->next[i]=NULL; } else { Delete(p_head[k],0); } } else if(strcmp(order,"search")==0) { int k=input[0]-'a'; bool flag=Search(p_head[k],0); if(flag) printf("Yes\n"); else printf("No\n"); } } return 0; }