2016"百度之星" - 资格赛(Astar Round1)Problem C(字典树)
来源:互联网 发布:mysql两表关联update 编辑:程序博客网 时间:2024/05/21 17:01
Problem C
Time Limit: 2000/1000 MS (Java/Others)
Memory Limit: 131072/131072 K (Java/Others)
解题思路:普通的字典树(带插入、删除、查询功能)
①insert:插入操作,插入输入的字符串s;
②search:查询操作,问是否存在以字符串s作为前缀的字符串
③delete:删除操作,删除以字符串s作为前缀的所有字符串(包括前缀本身)
之前因为就有字典树模板,但是没有删除操作这一块,所以裸敲删除操作就可以AC
在删除操作时,要注意,我是通过初始化前缀字符串s的最后一个字母结点来达到删除的功能,但第一次忘了去更新前驱节点的值导致WA了一发
为了便于理解,放一组测试数据
INPUT
4
insert hello
search h
detele hell
search h
OUTPUT
Yes
No
题目链接→HDU 5687 Problem C
/*Sherlock and Watson and Adler*/#pragma comment(linker, "/STACK:1024000000,1024000000")#include<stdio.h>#include<string.h>#include<stdlib.h>#include<queue>#include<stack>#include<math.h>#include<vector>#include<map>#include<set>#include<cmath>#include<complex>#include<string>#include<algorithm>#include<iostream>#define exp 1e-10using namespace std;const int N = 35;const int M = 26;const int inf = 100000000;const int mod = 2009;struct tree{ int a[M],t;}s[1000005];char ch[N];int p;void init(int x){ s[x].t=0; memset(s[x].a,-1,sizeof(s[x].a));}void buildtree(){ int i,k=0; for(i=0;ch[i]!='\0';i++) { if(s[k].a[ch[i]-'a']==-1) { s[k].a[ch[i]-'a']=p; init(p++); } k=s[k].a[ch[i]-'a']; s[k].t++; } }void query(){ int i,k=0; for(i=0;ch[i]!='\0';i++) { if(s[k].a[ch[i]-'a']==-1) { puts("No"); return ; } k=s[k].a[ch[i]-'a']; } if(s[k].t) puts("Yes"); else puts("No");}void deletetree(){ int i,k=0,z; for(i=0;ch[i]!='\0';i++) { if(s[k].a[ch[i]-'a']==-1) return ; k=s[k].a[ch[i]-'a']; } z=s[k].t; for(k=i=0;ch[i]!='\0';i++) { k=s[k].a[ch[i]-'a']; s[k].t-=z; } init(k);}char x[10];int main(){ int n,m,i; while(~scanf("%d",&n)) { p=0;init(p++); for(i=0;i<n;i++) { scanf("%s%s",x,ch); if(x[0]=='i') buildtree(); else if(x[0]=='s') query(); else deletetree(); } } return 0;}
菜鸟成长记
0 0
- 2016"百度之星" - 资格赛(Astar Round1)Problem C(字典树)
- 2016"百度之星" - 资格赛(Astar Round1)Problem C
- 2016"百度之星" - 资格赛(Astar Round1)Problem C
- Problem C (字典树的查找删除和插入)2016"百度之星" - 资格赛(Astar Round1)
- 2016"百度之星" - 资格赛(Astar Round1)Problem C (tire树)
- 2016"百度之星" - 资格赛(Astar Round1)Problem B
- 2016"百度之星" - 资格赛(Astar Round1) Problem D
- 2016"百度之星" - 资格赛(Astar Round1) Problem D
- 2016"百度之星" - 资格赛(Astar Round1)Problem D
- 2016"百度之星" - 资格赛(Astar Round1)Problem A
- 2016"百度之星" - 资格赛(Astar Round1)Problem B
- 2016"百度之星" - 资格赛(Astar Round1)Problem D
- Problem B 2016"百度之星" - 资格赛(Astar Round1)
- Problem D 2016"百度之星" - 资格赛(Astar Round1)
- 2016"百度之星" - 资格赛(Astar Round1) C
- 2016"百度之星" - 资格赛(Astar Round1)Problem A B C D--java代码
- 2016"百度之星" - 资格赛(Astar Round1)Problem C --java代码
- 2016"百度之星" - 资格赛(Astar Round1)Problem A 线段树区间查询
- 濮阳买房 房价预估 参考,
- 泡妞相关技能学习。
- Android,找工作,百度应用上的参考apk
- Python内置函数(一)
- 再谈如何将android studio项目转换成eclipse
- 2016"百度之星" - 资格赛(Astar Round1)Problem C(字典树)
- Win10应用商店、应用打不开或闪退的解决方法
- C++11尝鲜:右值引用和转发型引用
- Range对象介绍
- android开发笔记之 AlarmManager(闹钟服务)
- Unity 官方案例 打砖块
- 关于python字符串的处理
- 数据结构之魔方程序
- 我在Adapter中使用holder时踩到的坑