Problem Description

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

  1. 1insert : 往神奇字典中插入一个单词
  2. 2delete: 在神奇字典中删除所有前缀等于给定字符串的单词
  3. 3search: 查询是否在神奇字典中有一个字符串的前缀等于给定的字符串
Input

这里仅有一组测试数据。第一行输入一个正整数N (1\leq N\leq 100000)N(1≤N≤100000),代表度熊对于字典的操作次数,接下来NN行,每行包含两个字符串,中间中用空格隔开。第一个字符串代表了相关的操作(包括: insert, delete 或者 search)。第二个字符串代表了相关操作后指定的那个字符串,第二个字符串的长度不会超过30。第二个字符串仅由小写字母组成。

Output

对于每一个search 操作,如果在度熊的字典中存在给定的字符串为前缀的单词,则输出Yes 否则输出 No。

Sample Input
  1. 5
  2. insert hello
  3. insert hehe
  4. search h
  5. delete he
  6. search hello
Sample Output
Copy

  1. Yes
  2. No
    字典树的操作~模版自己加了删除语句
  1. #include<stdio.h>
  2. //#include<bits/stdc++.h>
  3. #include<string.h>
  4. #include<iostream>
  5. #include<math.h>
  6. #include<sstream>
  7. #include<set>
  8. #include<queue>
  9. #include<map>
  10. #include<vector>
  11. #include<algorithm>
  12. #include<limits.h>
  13. #define inf 0x7fffffff
  14. #define INFL 0x7fffffffffffffff
  15. #define lson l,m,rt<<1
  16. #define rson m+1,r,rt<<1|1
  17. #define LL long long
  18. #define ULL unsigned long long
  19. using namespace std;
  20.  
  21. typedef struct Trie{
  22. int v;
  23. Trie *next[];
  24. }Trie;
  25. Trie root;
  26. void createTrie(char *str)
  27. {
  28. int len = strlen(str);
  29. Trie *p = &root, *q;
  30. for(int i=; i<len; ++i)
  31. {
  32. int id = str[i]-'a';
  33. if(p->next[id] == NULL)
  34. {
  35. q = (Trie *)malloc(sizeof(root));
  36. q->v = ;
  37. for(int j=; j<; ++j)
  38. q->next[j] = NULL;
  39. p->next[id] = q;
  40. p = p->next[id];
  41. }
  42. else
  43. {
  44. p->next[id]->v++;
  45. p = p->next[id];
  46. }
  47. }
  48. }
  49.  
  50. int findTrie(char *str)
  51. {
  52. int len = strlen(str);
  53. Trie *p = &root;
  54. for(int i=; i<len; ++i)
  55. {
  56. int id = str[i]-'a';
  57. p = p->next[id];
  58. if(p == NULL)
  59. return ;
  60. }
  61. return p->v;
  62. }
  63. void dele(char *str,int n)
  64. {
  65. Trie *p = &root;
  66. int len = strlen(str);
  67. for(int i=; i<len; ++i)
  68. {
  69. int id = str[i]-'a';
  70. p = p->next[id];
  71. p->v-=n;
  72. }
  73. for(int j=; j<; ++j)
  74. {
  75. p->next[j] = NULL;
  76. }
  77. }
  78. int main()
  79. {
  80. int t;
  81. char s1[],s2[];
  82. for(int i=;i<;i++)
  83. {
  84. root.next[i]=NULL;
  85. }
  86. cin>>t;
  87. while(t--)
  88. {
  89. scanf("%s%s",s1,s2);
  90. if(s1[]=='i')
  91. {
  92. createTrie(s2);
  93. }
  94. else if(s1[]=='s')
  95. {
  96. int ans=findTrie(s2);
  97. if(ans)
  98. {
  99. puts("Yes");
  100. }
  101. else
  102. {
  103. puts("No");
  104. }
  105. }
  106. else
  107. {
  108. int cnt=findTrie(s2);
  109. if(cnt)
  110. {
  111. dele(s2,cnt);
  112. }
  113. }
  114. }
  115. return ;
  116. }

2016"百度之星" - 资格赛(Astar Round1)C的更多相关文章

  1. 2016百度之星 资格赛ABCDE

    看题:http://bestcoder.hdu.edu.cn/contests/contest_show.php?cid=690 交题:http://acm.hdu.edu.cn/search.php ...

  2. HDU 5688:2016"百度之星" - 资格赛 Problem D

    原文链接:https://www.dreamwings.cn/hdu5688/2650.html Problem D Time Limit: 2000/1000 MS (Java/Others)    ...

  3. HDU 5686:2016"百度之星" - 资格赛 Problem B

    原文链接:https://www.dreamwings.cn/hdu5686/2645.html Problem B Time Limit: 2000/1000 MS (Java/Others)    ...

  4. HDU 5685:2016"百度之星" - 资格赛 Problem A

    原文链接:https://www.dreamwings.cn/hdu5685/2637.html Problem A Time Limit: 2000/1000 MS (Java/Others)    ...

  5. 2016"百度之星" - 资格赛(Astar Round1)

    逆元 1001 Problem A 求前缀哈希和逆元 #include <bits/stdc++.h> typedef long long ll; const int MOD = 9973 ...

  6. 2016"百度之星" - 资格赛(Astar Round1) 1004

    思路:题目很简单,直接用map记录每个字符串的个数就可以了.记得对每个字符串先sort(). AC代码: #include <cstdio> #include <stdlib.h&g ...

  7. 2016"百度之星" - 资格赛(Astar Round1) 1001

    思路:第一个做法就是:每读入起始位置i和结束位置j,就从这位置i到位置j计算,可是TLE了,后面我想想要是我输入一个最长的字符串,且以最大次数计算开始位置1到结束位置100000,那么这计算量是很大的 ...

  8. 2016"百度之星" - 资格赛(Astar Round1) Problem E

    简单模拟题,耐心写就能过. #include <stdio.h> #include <math.h> #include<cstring> #include<c ...

  9. 2016"百度之星" - 资格赛(Astar Round1) Problem C

    字典树. 插入的时候update一下节点出现的次数. delete的时候,先把前缀之后的全删了.然后看前缀最后一个节点出现了几次,然后前缀上每个节点的次数都减去这个次数. 前缀从上到下再检查一遍,如果 ...

  10. 2016"百度之星" - 资格赛(Astar Round1) Problem D

    排个序,map直接搞. #include <stdio.h> #include <math.h> #include<cstring> #include<cma ...

随机推荐

  1. Shiro权限框架简介

    http://blog.csdn.net/xiaoxian8023/article/details/17892041   Shiro权限框架简介 2014-01-05 23:51 3111人阅读 评论 ...

  2. python爬虫--编码问题y

    1)中文网站爬取下来的内容中文显示乱码 Python中文乱码是由于Python在解析网页时默认用Unicode去解析,而大多数网站是utf-8格式的,并且解析出来之后,python竟然再以Unicod ...

  3. jquery datatable设置垂直滚动后,表头(th)错位问题

    jquery datatable设置垂直滚动后,表头(th)错位问题 问题描述: 我在datatable里设置:"scrollY": '300px',垂直滚动属性后,表头的宽度就会 ...

  4. webform 内置对象(页面间传值)

    QueryString/URL传值  页面名后面加?变量名=值 有点:不占服务器内存. 缺点:保密性差:传递字符串长度有限. Response   --相应请求对象 Response.Redirect ...

  5. 最短路径Dijkstar算法和Floyd算法详解(c语言版)

    博客转载自:https://blog.csdn.net/crescent__moon/article/details/16986765 先说说Dijkstra吧,这种算法只能求单源最短路径,那么什么是 ...

  6. WOJ 43 电话邀请

    并查集缩点这个trick感觉明明用得很广泛,为什么以前都不知道…… 先把$m$条线路从小到大排个序,这样可以保证之前合并出来的一定是最小的,大的代价不会把小的覆盖掉. 维护两个并查集,一个用来缩点,另 ...

  7. 去掉utf-8的Bom头:使用java以及jdbc不使用第三方库执行sql文件脚本

    package com.xxx.xxx.dao; import java.io.BufferedReader; import java.io.File; import java.io.FileInpu ...

  8. 数据结构_sfdg(小F打怪)

    问题描述 小 F 很爱打怪, 今天因为系统 bug, 他提前得知了 n 只怪的出现顺序以及击倒每只怪得到的成就值 ai. 设第一只怪出现的时间为第 1 秒,这个游戏每过 1 秒钟出现一只新怪且没被击倒 ...

  9. HUST高级软件工程--测试管理工具实践--Day3

    测试管理工具实践--Day3 今天完成任务情况: 小靳 今天,大家参加考试,时间比较紧促.庆幸,自己的队伍比较给力,大家都没有拖后腿,深夜还在为自己的任务拼搏,很是激励人心 我今天的工作就是 学会了注 ...

  10. JDBC 配置环境

    一.配置JDBC环境:先下载驱动jar包 1.配置classpath环境变量  如(E:\jdbc\mysql-connector-java-5.1.7-bin.jar) 2.数据库URL: 2.1 ...