HDU-5687-Problem C

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU-5687-Problem C相关的知识,希望对你有一定的参考价值。

?????????turn   ble   init   ++   scan   nbsp   clu   main   ini   

#include"bits/stdc++.h"
using namespace std;
struct tree{
    tree* Next[26];
    int cnt;
}*root;
tree* init(){
    tree* t=(tree*)malloc(sizeof(tree));
    memset(t->Next,NULL,sizeof(t->Next));
    t->cnt=0;
    return t;
}
void in(char* s){
    tree* now=root;
    for(int i=0;s[i];i++){
        int j=s[i]-???a???;
        if(!now->Next[j])now->Next[j]=init();
        now=now->Next[j];
        now->cnt++;
    }
}
void out(char* s){
    tree* now=root;
    for(int i=0;s[i];i++){
        int j=s[i]-???a???;
        if(!now->Next[j]){
            puts("No");
            return;
        }
        now=now->Next[j];
    }
    puts("Yes");
}
void era(tree* t){
    for(int i=0;i<26;i++)
    if(t->Next[i])era(t->Next[i]);
    free(t);
}
void de(char* s){
    tree* now=root;
    for(int i=0;s[i];i++){
        int j=s[i]-???a???;
        if(!now->Next[j])return;
        now=now->Next[j];
    }
    int n=now->cnt;now=root;
    for(int i=0;s[i];i++){
        int j=s[i]-???a???;
        if(now->Next[j]->cnt==n){
            era(now->Next[j]);
            now->Next[j]=NULL;
            return;
        }
        now=now->Next[j];
        now->cnt-=n;
    }
}
char s1[10],s2[35];
int main(){
    int n;root=init();
    scanf("%d",&n);
    while(n--){
        scanf("%s%s",s1,s2);
        if(s1[0]==???i???)in(s2);
        else if(s1[0]==???s???)out(s2);
        else de(s2);
    }
    return 0;
}

 

以上是关于HDU-5687-Problem C的主要内容,如果未能解决你的问题,请参考以下文章

HDU 5687 Problem C ( 字典树前缀增删查 )

C 中的共享内存代码片段

[linux][c/c++]代码片段01

C语言代码片段

c_cpp Atlas300代码片段

c_cpp Robolution基本代码片段