字典树(增删改查 HDU 5687)
1、insert : 往神奇字典中插入一个单词
2、delete: 在神奇字典中删除所有前缀等于给定字符串的单词
3、search: 查询是否在神奇字典中有一个字符串的前缀等于给定的字符串
5
insert hello
insert hehe
search h
delete he
search hello
Sample Output
Yes
No 思路分析 : 字典树板子题,唯一有个要注意的地方就是删除操作,你要删除具有公共前缀的所有串,首先可以先计算出公共前缀的个数,然后再去处理一遍所要处理的串,给每个节点删除掉公共前缀的个数,
将最后一个点的 val 变为 0 ,并且将其 next 全部变为 0即可。
代码示例 :
#define ll long long
const int maxn = 1e6+5;
const double pi = acos(-1.0);
const int inf = 0x3f3f3f3f; struct node
{
int next[26];
int val;
}t[maxn];
char f[20], s[50];
int rt = 1;
int num; void insert() {
int u = 0, v;
int len = strlen(s+1); for(int i = 1; i <= len; i++){
v = s[i] - 'a';
if (!t[u].next[v]) t[u].next[v] = rt++;
u = t[u].next[v];
t[u].val++;
}
} void del() {
int u = 0, v;
int len = strlen(s+1); for(int i = 1; i <= len; i++){
v = s[i] - 'a';
u = t[u].next[v];
t[u].val -= num;
}
t[u].val = 0;
for(int j = 0; j < 26; j++) t[u].next[j] = 0;
} int search() {
int u = 0, v;
int len = strlen(s+1); for(int i = 1; i <= len; i++){
v = s[i] - 'a';
if (!t[u].next[v]) return 0;
u = t[u].next[v];
//if (t[u].val == 0) return 0;
}
return t[u].val;
} int main() {
//freopen("in.txt", "r", stdin);
//freopen("out.txt", "w", stdout);
int n;
cin >> n;
memset(t, 0, sizeof(t));
while(n--){
scanf("%s%s", f+1, s+1);
if (f[1] == 'i') insert();
else if (f[1] == 'd') {num = search(); if (num != 0) del();}
else {
if (search()) cout << "Yes" << endl;
else cout << "No" << endl;
}
}
return 0;
}
字典树(增删改查 HDU 5687)的更多相关文章
- DAY5(PYTHON) 字典的增删改查和dict嵌套
一.字典的增删改查 dic={'name':'hui','age':17,'weight':168} dict1={'height':180,'sex':'b','class':3,'age':16} ...
- 字典(dict),增删改查,嵌套
一丶字典 dict 用{}来表示 键值对数据 {key:value} 唯一性 键 都必须是可哈希的 不可变的数据类型就可以当做字典中的键 值 没有任何限制 二丶字典的增删改查 1.增 dic[k ...
- 2018.8.1 python中字典的增删改查及其它操作
一.字典的简单介绍 1.dict 用{}来表示 键值对数据 {key:value} 唯一性 2.键都必须是可哈希,不可变的数据类型就可以当做字典中的键 值没有任何限制 ...
- Ztree树增删改查菜单,遇到的问题总结
一.引言 我今天做了一个Ztree树增删改查菜单的功能.其中遇到了很多坑爹的问题,和大家讲述一下. 二.代码展示 1.Ztree树前台代码 <%@ page language="jav ...
- python字典的增删改查
字典dict 知识点: {}括起来,以键值对形式存储的容器性数据类型: 键-必须是不可变数据类型,且是唯一的: -值可以是任意数据类型.对象. 优点:关联性强,查询速度快. 缺点:以空间换时间. 字典 ...
- day6 note 字典的增删改查(以及setdefault用法补充)
今天的内容主要是join的用法和字典的用法,由于已经有前面的列表作为基础,所以还比较简单,不过因为昨天的作业比较难也比较多,所以作业的讲解占用的时间比较长.我需要好好消化一下作业的部分. 思维导图: ...
- python基础之字典以及增删改查
字典:字典是python中唯一的一个映射类型,主要形式为 dic = {key1:value,key2:value2,....} 字典中key的值是唯一的,主要关系到HASH算法,并且key的值必须是 ...
- 字典的增删改查 daty 5
字典:python中非常重要的数据类型,在python中唯一一个映射的数据类型数据类型分类 按照数据可变与不可变: # 不可变数据类型: int str bool tuple # 可变数据类型: li ...
- python字典的增删改查操作
一.字典 (键值对) 1.字典的基本格式:{key1:1,key2:2} 2.字典里的键必须是不可变的(如:数字,字符串,元组,bool值);值是可变的,可用数字,字符串,列表,字典等. 3.字典里 ...
随机推荐
- H3C 动态路由协议的基本原理
- linux版本依赖
记住, 你的模块代码一定要为每个它要连接的内核版本重新编译 -- 至少, 在缺乏 modversions 时, 这里不涉及因为它们更多的是给内核发布制作者, 而不是开发者. 模块 是紧密结合到一个特殊 ...
- 备战省赛组队训练赛第十七场(UPC)
upc:传送门 A: 题解[1] G: 题解[1] D,G,H,J,L 题解 by 鲁东大学
- Linux 内核 PCI 总线
任何在 PCI 总线上的设备有参数 name 和 SUBSYSTEM 环境变量设置为值 pci. PCI 子系 统也一直添加下面 4 个环境变量: PCI_CLASS 设备的 PCI 类号, 16 进 ...
- 2019-1-20-VisualStudio-安装-Python-开发
title author date CreateTime categories VisualStudio 安装 Python 开发 lindexi 2019-01-20 10:51:15 +0800 ...
- 33.python之操作系统,进程,线程
转载:https://www.cnblogs.com/yuanchenqi/articles/6248025.html 操作系统 一 为什么要有操作系统? 现代计算机系统是由一个或者多个处理器,主存, ...
- 使用easyExcel遇到的坑
最近有个功能,用easyExcel代替poi ,这个确实方便了不少,但是使用easyExcel也踩到了很多坑,在这里记录下easyExcel存在的问题,希望阅读这篇文档的人,可以更好的避免这些. 1. ...
- jquery中获取当前选中行数据的方法
$("table tr").click(function() { var td = $(this).find("td");// 找到td元素 var lo_id ...
- Java 连接 SQL Server 数据库
//连接数据库 public Connection getConnection(){ //url为绝对路径 String url="jdbc:sqlserver://127.0.0.1:14 ...
- 通过公网连接阿里云redis,rinetd
目前云数据库 Redis 需要通过 ECS 的内网进行连接访问.如果您本地需要通过公网访问云数据库 Redis,可以在 ECS Linux 云服务器中安装 rinetd 进行转发实现. 1.在云服务器 ...