Problem C

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

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)

问题链接:HDU5687 Problem C

问题描述:(略)

问题分析

这是一个字典树的问题。删除一个单词的做法比较特殊一些,需要注意。

程序说明

这里采用静态存储分配,删除单词是存储并没有回收,会有一定的浪费。程序倒是AC了。

参考链接:(略)

题记:(略)

AC的C++语言程序如下:

/* HDU5687 Problem C */#include <iostream>
#include <stdio.h>
#include <string.h>using namespace std;const int N = 100000;
const int LEN = 30;
const int SIZE = 26;
const char SCHAR = 'a';struct Trie {int acnt;   // access countint childs[SIZE];void init(){acnt = 1;memset(childs, 0, sizeof(childs));}
} trie[N * LEN];
int ncnt;   // Trie Node count
char cmd[8], s[LEN + 1]; // Inputvoid insert(char s[])
{int p = 0;for(int i = 0; s[i]; i++) {int k = s[i] - SCHAR;int child = trie[p].childs[k];if(child) {trie[child].acnt++;p = child;} else {trie[++ncnt].init();trie[p].childs[k] = ncnt;p = ncnt;}}
}int query(char s[])
{int p = 0;for (int i = 0; s[i]; i++) {int k = s[i] - SCHAR;int child = trie[p].childs[k];if (child == 0)return 0;elsep = child;}return trie[p].acnt;
}void remove(char s[])
{int p = 0, last = 0, k;for (int i = 0; s[i]; i++) {k = s[i] - SCHAR;int child = trie[p].childs[k];if (child == 0)return;else {last = p;p = child;}}trie[last].childs[k] = 0;int cnt = trie[p].acnt;p = 0;for (int i = 0; s[i + 1]; i++) {k = s[i] - SCHAR;p = trie[p].childs[k];trie[p].acnt -= cnt;}
}int main()
{int n;scanf("%d", &n);while(n--) {scanf("%s%s", cmd, s);if(cmd[0] == 'i')insert(s);else if(cmd[0] == 's')printf("%s\n", query(s) ? "Yes" : "No");else if(cmd[0] == 'd')remove(s);}return 0;
}

HDU5687 Problem C【字典树】相关推荐

  1. HDU 5687 Problem C 字典树

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

  2. hdu 5687 Problem C 字典树

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

  3. gym:Problem B Bless You Autocorrect!(字典树+最短路)

    2016-2017-acmicpc-nordic-collegiate-programming-contest-ncpc-2016 Problem B Bless You Autocorrect! 题 ...

  4. HDU 5687 Problem C (字典树)

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

  5. 字符串处理——字典树

    [概述] 字典树,又称为单词查找树,Tire 树,是一种树形结构,它是哈希树的变种. 字典树与字典很相似,当要查一个单词是不是在字典树中,首先看单词的第一个字母是不是在字典的第一层,如果不在,说明字典 ...

  6. BZOJ 3483 SGU505 Prefixes and suffixes(字典树+可持久化线段树)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3483 [题目大意] 给出一些串,同时给出m对前缀后缀,询问有多少串满足给出的前缀后缀模 ...

  7. 2014百度之星 Xor Sum(字典树+贪心)

    题目在HDU_OJ Problem Description Zeus 和 Prometheus 做了一个游戏,Prometheus 给 Zeus 一个集合,集合中包含了N个正整数,随后 Prometh ...

  8. C++ __gnu_pbds(平板电视)超详细教程(C++内置的平衡树,字典树,hash)

    整理的算法模板合集: ACM模板 目录 一.平衡树 例题:luogu P3369 [模板]普通平衡树 1. `rb_tree_tag`版 2. `splay_tree_tag`版 功能不够?自己添加! ...

  9. 0x16.基本数据结构 — Trie树(字典树)+ A C 自 动 机

    目录 用TrieTrieTrie树来处理整数异或问题是真的舒服! 一.TrieTrieTrie树 TrieTrieTrie的基本操作 0.初始化 1.插入 2.检索 二.TrieTrieTrie树例题 ...

最新文章

  1. python sqlalchemy中文手册-基于Python的SQLAlchemy的操作
  2. ACM数论之旅17---反演定理 第一回 二项式反演(神说要有光 于是就有了光(´・ω・`))...
  3. POI导入大excel文件
  4. 文件上传流式处理commons-fileupload
  5. php调用数据库中的图片地址显示不出来,图片显示不出来,但是数据库里有显示...
  6. 11纯代码 oc xcode_iOS代码染色原理及技术实践
  7. osm数据导入mysql_OSM(OpenStreetMap) poi、路网 数据导入 PostgreSQL
  8. OpenGL基础31:混合
  9. scratch3.0 整体页面介绍
  10. Ring3加载驱动源码
  11. Python语言概述
  12. 词根词缀|pen/pend/peri/pet/photo等衍生单词
  13. Ripple 源码笔记
  14. 2018年大连海事大学校赛(ACM竞赛高校联盟训练赛 第11场)题解
  15. iMX6UL lvgl开发备忘
  16. 评测酷睿i5 12500h和i7 12650h差多少 i512500h和i712650h对比
  17. 女生双修计算机科学与技术,浙江大学计算机科学与技术学院数字媒体技术专业毕业作品展...
  18. MIC的常见问题分析
  19. iOS摸鱼周报 第二十四期
  20. 一个登录页面的测试用例——软件测试

热门文章

  1. GDAL库读取Envisat ASAR数据
  2. 使用GDAL工具对FY3系列卫星数据进行校正
  3. Modelbuilder进阶教程
  4. HiddenHttpMethodFilter过滤器—SpringMVC
  5. TweenLite中文帮助手册
  6. C#使用双堆栈创建队列
  7. 从零玩转Webpack4~5+实现原理笔记(二)
  8. 机器人社社长事迹_国际机器人大赛冠军背后的故事
  9. Linux 2.6 和安卓一样吗,Linux2.4和Linux2.6设备驱动的一些区别
  10. python要求将字符串循环右移n次_python 基础知识