码迷,mamicode.com
首页 > 其他好文 > 详细

HDU 5687 Problem C

时间:2020-04-02 22:16:29      阅读:57      评论:0      收藏:0      [点我收藏+]

标签:arch   memset   div   oid   sea   for   处理   就是   har   

字典树(增删改查 )

度熊手上有一本神奇的字典,你可以在它里面做如下三个操作:

1、insert : 往神奇字典中插入一个单词

2、delete: 在神奇字典中删除所有前缀等于给定字符串的单词

3、search: 查询是否在神奇字典中有一个字符串的前缀等于给定的字符串

Input这里仅有一组测试数据。第一行输入一个正整数,代表度熊对于字典的操作次数,接下来
5
insert hello
insert hehe
search h
delete he
search hello
Yes
No


思路分析 : 字典树板子题,唯一有个要注意的地方就是删除操作,你要删除具有公共前缀的所有串,首先可以先计算出公共前缀的个数,然后再去处理一遍所要处理的串,给每个节点删除掉公共前缀的个数,
  将最后一个点的 val 变为 0 ,并且将其 next 全部变为 0即可。

#define ll long long
const int maxn = 1e6+5;
const double pi = acos(-1.0);
const int inf = 0x3f3f3f3f;
 
struct node
{
    int next[26];
    int val;
}t[maxn];
char f[20], s[50];
int rt = 1;
int num;
 
void insert() {
    int u = 0, v;
    int len = strlen(s+1);
    
    for(int i = 1; i <= len; i++){
        v = s[i] - ‘a‘;
        if (!t[u].next[v]) t[u].next[v] = rt++;
        u = t[u].next[v]; 
        t[u].val++;
    } 
}
 
void del() {
    int u = 0, v;
    int len = strlen(s+1);
    
    for(int i = 1; i <= len; i++){
        v = s[i] - ‘a‘; 
        u = t[u].next[v]; 
        t[u].val -= num;
    }
    t[u].val = 0;
    for(int j = 0; j < 26; j++) t[u].next[j] = 0;
}
 
int search() {
    int u = 0, v;
    int len = strlen(s+1);
    
    for(int i = 1; i <= len; i++){
        v = s[i] - ‘a‘;
        if (!t[u].next[v]) return 0;
        u = t[u].next[v];
        //if (t[u].val == 0) return 0;
    }
    return t[u].val;
}
 
int main() 
{
   
    int n;
    cin >> n;
    memset(t, 0, sizeof(t));
    while(n--){
        scanf("%s%s", f+1, s+1);
        if (f[1] == ‘i‘) 
		    insert();
        else 
		    if (f[1] == ‘d‘) 
		     {
			      num = search();  //统计前缀 
		          if (num != 0) 
		             del();//删除这些前缀 
			}
        else {
            if (search()) cout << "Yes" << endl;
            else cout << "No" << endl;
        }
    }
    return 0;
}

  

HDU 5687 Problem C

标签:arch   memset   div   oid   sea   for   处理   就是   har   

原文地址:https://www.cnblogs.com/cutemush/p/12623347.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!