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

字典树的插入和删除以及查询操作,每个点开个count统计有多少条字符串,此题容易爆内存。
#include<cstdio>
#include<string>
#include<map>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long LL;
const int maxn = 50;
const int maxp = 3e6 + 5;
char s[maxn], x[maxn];
int n, tot, cnt[maxp];
int f[maxp][26];int main()
{while (scanf("%d", &n) != EOF){tot = 1; cnt[1] = 0; memset(f[0], 0, sizeof(f[0]));while (n--){scanf("%s%s", s, x);if (s[0] == 'i'){int rt = 1;for (int i = 0,j; x[i]; i++){j = x[i] - 'a';if (!f[rt][j]){f[rt][j] = ++tot;cnt[tot] = 0; memset(f[tot], 0, sizeof(f[tot]));}rt = f[rt][j];    ++cnt[rt];}}if (s[0] == 's'){int rt = 1;for (int i = 0, j; x[i]; i++){j = x[i] - 'a';if (!(rt = f[rt][j])){printf("No\n"); rt = 0; break;}}if (rt) printf("Yes\n");}if (s[0] == 'd'){int rt = 1;for (int i = 0, j; x[i]; i++){j = x[i] - 'a';if (!f[rt][j]) { rt = 0; break; }else rt = f[rt][j];}if (!rt) continue;int tr = 1;for (int i = 0, j; x[i]; i++){j = x[i] - 'a';if (!f[tr][j]) break;else{int k = f[tr][j];cnt[k] -= cnt[rt];if (!cnt[k]) k = f[tr][j] = 0;tr = k;}}}}}return 0;
}

HDU 5687 Problem C相关推荐

  1. hdu 5687 Problem C 字典树

    传送门:hdu 5687 Problem C 中文题目就不做过多的解释 解题思路 定义一个结构体,里面有26个字母,就像下面这样: struct Node{int next[26];int sum;v ...

  2. hdu 5687 Problem C

    点击打开链接 Problem C Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Other ...

  3. HDU 5687 Problem C 字典树

    Problem C Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Tota ...

  4. hdu 5687 Problem C trie树

    Problem C Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Prob ...

  5. HDU 5687 Problem C (字典树)

    题意: 度熊手上有一本神奇的字典,你可以在它里面做如下三个操作: 1.insert : 往神奇字典中插入一个单词 2.delete: 在神奇字典中删除所有前缀等于给定字符串的单词 3.search: ...

  6. HDU 6343.Problem L. Graph Theory Homework-数学 (2018 Multi-University Training Contest 4 1012)

    6343.Problem L. Graph Theory Homework 官方题解: 一篇写的很好的博客: HDU 6343 - Problem L. Graph Theory Homework - ...

  7. HDU 6340 Problem I. Delightful Formulas(伯努利数 + 积性函数反演)

    Problem I. Delightful Formulas 大概就是照着题解抄了一遍吧,这道题太神仙了-- ai=ik,si=∑j=1iajcalc∑i=1nsi[gcd⁡(i,n)=1]∑d∣nμ ...

  8. HDU 6428 Problem C. Calculate(积性函数)

    Problem C. Calculate ϕ=ϕ∗ϵ=ϕ∗μ∗Iϕ(n)=∑d∣n(ϕ∗μ)(d)设g(n)=∑d∣n(ϕ∗μ)(d)∑i=1A∑j=1B∑k=1Cϕ(gcd(i,j2,k3))∑i= ...

  9. [HDU](6333)Problem B. Harvest of Apples ---- 数论+莫队算法

    Problem Description There are n apples on a tree, numbered from 1 to n. Count the number of ways to ...

最新文章

  1. Boyer-Moore 字符串匹配算法
  2. vn.py 2.0.1 发布,全功能交易程序开发框架
  3. Mysql 客户端查询结果如何保存到本地而不是服务端?
  4. Linux命令-目录处理命令:mkdir
  5. 菜鸟学Linux 第026篇笔记 LVM
  6. MRO的计算(C3算法及应用)
  7. Asp.net发布网站
  8. android系统硬件OpenGL 3D移植(二)
  9. 聊聊我的 2018 年
  10. git branch查看/删除分支
  11. 学生信息管理系统html代码,学生信息管理系统源代码.doc
  12. 根据点云及其对应的四元数与GPS计算出其相对坐标系的经纬坐标(matlab)
  13. NDK撩妹三部曲(四)—NDK 开发如何优雅的定位 Native 异常,看这篇就够了
  14. 橘子学ES10之搜索API入门
  15. 【待更新】【UWB】UWB 学习、使用及 QCA平台移植实例
  16. 中国医学计算机成级别像杂志,中国医学计算机成像杂志
  17. html页面滚动条监听事件,滚动条的scroll事件
  18. java.sql.SQLException: unkow jdbc driver : jdbc:oscar:@127.0.0.1:2003/OSRDB
  19. 美团点评2020校招数据分析方向笔试题
  20. 计算机上wps表格乘除算法,WPS excel如何快速运算单个单元格中的乘除法?

热门文章

  1. css三大特性权重计算BFC(块级格式化上下文)盒子模型
  2. 深度学习中的量化学习与量化训练
  3. 线性代数(4): 矩阵的应用
  4. 菜尼奥排错之TensorRT libmyelin.so.1: cannot open shared object file: No such file or directory
  5. 如何查看自己的显卡信息?
  6. 【Ant】下载、安装、验证
  7. 关于AS遇到Unexpected error while executing: am start -n com.example.administrator.myqq/com.example.admi
  8. Jenkins:如何给coding的项目绑定钉钉机器人
  9. html中border细线样式,网页中实现细线边框的两种方法
  10. mysql-generator用法_mybatis-generator使用教程