Problem C

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)
Total Submission(s): 1423    Accepted Submission(s): 426

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

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

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

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

Input
这里仅有一组测试数据。第一行输入一个正整数 N(1≤N≤100000),代表度熊对于字典的操作次数,接下来N行,每行包含两个字符串,中间中用空格隔开。第一个字符串代表了相关的操作(包括: insert, delete 或者 search)。第二个字符串代表了相关操作后指定的那个字符串,第二个字符串的长度不会超过30。第二个字符串仅由小写字母组成。
Output
对于每一个search 操作,如果在度熊的字典中存在给定的字符串为前缀的单词,则输出Yes 否则输出 No。
Sample Input
5 insert hello insert hehe search h delete he search hello
Sample Output
Yes No
Source
2016"百度之星" - 资格赛(Astar Round1)
算是trie的入门级题目吧,也是第一次做字典树,搞了好久。
一开始每个node分一个bool变量总感觉可以,后发现操作都是对前缀而言,并没有精确到某一个词,所以换成了int方便统计。
例节点root->a->p->p的值为x,就表示app为前缀的词的数量,在insert和delete时维护这个变量、
还有就是指针的操作,又被搞迷糊一直RE,例如 node *p1=new node(),*p2=new node();
p1->child=p2;  这时如果令p2=NULL,则p1->child并不会变为NULL,这时显然的吧,,,,只是p1->child和p2指向了同一处内存而已,内存没有delete,
p1->child也不会受到影响。同理如果delete  p2,则p2指向的内存被释放,p1->child指向的这块也是被释放的内存了。
#include<bits/stdc++.h>
using namespace std;
struct node
{int have;node *child[26];node(){have=0;for(int i=0;i<26;++i) child[i]=NULL;}
};
node *root;
void release(node *p)
{if(p==NULL) return;for(int i=0;i<26;++i){if(p->child[i]!=NULL) release(p->child[i]);}delete p;
}
void Insert(char *s)
{node *p=root;int n1=strlen(s);for(int i=0;i<n1;++i){int t=s[i]-'a';if(p->child[t]==NULL)p->child[t]=new node();p=p->child[t];p->have++;}
}void Delete(char *s)
{node *p=root,*pre=p;int n1=strlen(s),t,num=0;for(int i=0;i<n1;++i){ t=s[i]-'a';if(p->child[t]==NULL) return;pre=p;p=p->child[t];}num=p->have;release(p);pre->child[t]=NULL;p=root;for(int i=0;i<n1-1;++i){p=p->child[s[i]-'a'];p->have-=num;}
}
bool Search(char *s)
{node *p=root;int n1=strlen(s);for(int i=0;i<n1;++i){int t=s[i]-'a';if(p->child[t]==NULL) return 0;p=p->child[t];}if((p->have)<1) return 0;return 1;
}
int main()
{int N,i,j;char s1[25],s2[35];cin>>N;root=new node();while(N--){scanf("%s%s",s1,s2);if(!strcmp(s1,"insert")){Insert(s2) ;}else if(!strcmp(s1,"delete")){Delete(s2);}else if(!strcmp(s1,"search")){Search(s2)?puts("Yes"):puts("No");}}release(root);return 0;
}

转载于:https://www.cnblogs.com/zzqc/p/7204863.html

HDU 5687 字典树入门相关推荐

  1. hdu 1251 统计难题 (字典树入门题)

    1 /******************************************************* 2 题目: 统计难题 (hdu 1251) 3 链接: http://acm.hd ...

  2. 字典树实现_【Leetcode每日打卡】单词的压缩编码 Trie(字典树)入门

    一.前言(鸡汤(一段废..话..可以跳过啦)) 同学们好!没想到我这个小小的公众号破千粉啦,对于大佬们而言或许不值一提,但是对我而言是一个莫大的鼓舞!更加坚定了我持续输出优质内容的决心.希望我们都能每 ...

  3. hdu 4099 字典树 + 斐波那契

    题意:       给你一个串(最长40位)问你这个串是斐波那契F(n)  n <= 99999中的那个数的前缀,如果存在多个输出最小的n否则输出-1. 思路:       给的串最长40位,那 ...

  4. hdu 1298 字典树 + DFS (模拟T9文本输入)

    题意:       给你一些按键顺序,让你输出每一步中概率最大的那个单词,这里的概率计算方 法好好看看别弄错了,一开始就是因为弄错了,各种wa,比如 abc 1 ,ab 1,那么 ab 的概率就是2 ...

  5. Prefix HDU - 5790 字典树 + 主席树

    传送门 文章目录 题意: 思路: 题意: 给你nnn个串,每次询问一个区间,返回这个区间的串的不同的前缀个数,强制在线. 思路: 碰到字符串前缀的问题,我们自然的想到用字典树来解决. 对于每个串,我们 ...

  6. HDU 1800(字典树)

    简单的字典树水题,统计为单词前缀的单词数,取最大,注意要去前0,具体原理还是自己想想吧,最大数决定了最大分组. 诶 PKU月赛之后 我发现我只会水的 .............. #include&l ...

  7. HDU 5536 字典树

    题意:就是公式. 这现场赛O(n^3)能过,觉得太没天理了. 做法:字典树,枚举两个数,然后在字典树上贪心的跑. #include <bits/stdc++.h>using namespa ...

  8. hdu 1247 字典树

    题意:给你一部分单词,让你找出所有这样的单词:a+b=c,就是一个单词,由另外两个单词串联而成 解题思路:先输入全部单词,构建一棵tire树,然后枚举所有单词,对单词进行查找,查找过程中经过的单词节点 ...

  9. hdu 1251 字典树,指针版

    这题内存需求很大,我用静态数组写的trie总MLE,看discuss说50w的数组才过,但我一开50w的就MLE了啊--想不通 这是链表版的trie,1个case,所以也不用考虑内存释放什么的 #in ...

最新文章

  1. iOS开发工具——网络封包分析工具Charles
  2. (二)Linux命令使用
  3. Winsock开发网络通信程序的经典入门
  4. 多个常见代码设计缺陷
  5. AspNetCoreMassTransit Courier实现分布式事务
  6. [TJOI2018]智力竞赛 (匈牙利)
  7. yaahp层次分析法步骤_综合评价方法之层次分析法,选择再也难不倒你!
  8. java access jdbc_Java连接Access数据库
  9. jquery原型方法map的使用和源码分析
  10. 绿盾有办法:WPS文档加密的三板斧
  11. linux Vi操作和使用方法详解
  12. YYText-swift,swift版的YYText,优化了yylabel和yytextview的部分扩展
  13. STM32F103串口通信用于获取GY-53 红外测距模块数据
  14. 小程序使用绑定手机号码接口显示失败
  15. 【数据库记录】数据库三大范式和BCNF范式
  16. MacOS Catalina 10.15安装教程,启动U盘制作及安装方法
  17. 微信服务号添加小程序
  18. lzg_ad:打印机需要的组件支持
  19. 中企海外周报 | 哈弗F7x性能版在俄罗斯上市;徐工首家海外银行落户巴西
  20. scrapy使用用Xpath提取深层标签

热门文章

  1. Holistic Multi-modal Memory Network for Movie Question Answering心得体会
  2. php5的魔术方法,php5中魔术方法学习笔记
  3. Data Management 是指整个数据生命周期的管理,从收集、存储、分析和处理,一直到保护数据安全与隐私
  4. 贵州职称取消计算机,贵州老师们,在不久或将实行取消教师职称评定!按教龄直接晋升职称!...
  5. 2020年TI杯大学生电子设计大赛 无线运动传感器节点 作品开源( PCB、设备/服务器工程、文档、测试视频、设计报告)
  6. 蓝桥杯 2015国赛 四阶幻方
  7. HVM,Hexagon处理器的虚拟器解决方案
  8. php fetchall 游标,使用返回空数据帧游标.fetchall()
  9. MIME Type介绍
  10. 亚马逊上传产品时出现错误代码“5461”怎么解决?