字典树

Time Limit: 1000 ms Memory Limit: 65536 KiB

Submit Statistic

Problem Description

遇到单词不认识怎么办? 查字典啊,已知字典中有n个单词,假设单词都是由小写字母组成。现有m个不认识的单词,询问这m个单词是否出现在字典中。

Input

含有多组测试用例。

第一行输入n,m (n>=0&&n<=100000&&m>=0&&m<=100000)分别是字典中存在的n个单词和要查询的m个单词.

紧跟着n行,代表字典中存在的单词。

然后m行,要查询的m个单词

n=0&&m=0 程序结束

数据保证所有的单词都是有小写字母组成,并且长度不超过10

Output

若存在则输出Yes,不存在输出No .

Sample Input

3 2
aab
aa
ad
ac
ad
0 0

Sample Output

No
Yes

Hint

Source

gyx

#include <bits/stdc++.h>
using namespace std;
struct tree
{int cnt;tree *nextt[26];
};
tree T[1000000]; // 申请静态内存
int top;
tree *creat() // 创建下一代
{tree *p = &T[top++];for (int i = 0; i < 26; i++)p->nextt[i] = NULL;p->cnt = 0;return p;
}void insert(tree *root, char *str) // 插入单词构建字典
{tree *p = root;for (int i = 0; i < strlen(str); i++){int index = str[i] - 'a';    // index 索引字符str[i]在26字母中的顺序if (p->nextt[index] != NULL) // 当这一位置已经有了这个字符的时候 进入下一代{p = p->nextt[index]; // 进入判断下一层index位置是否有元素continue;}else // 当这一位置没有有这个字符的时候 开辟下一代并存入将此字符当代{p->nextt[index] = creat();p = p->nextt[index];}}p->cnt = 1; // 标记这里存完一个单词 便于后序查找//return 0;
}int search(tree *root, char *str)
{tree *p = root;for (int i = 0; i < strlen(str); i++){int index = str[i] - 'a';if (p->nextt[index] != NULL) // 匹配到该字母 进入下一层p = p->nextt[index];else // 匹配不到终止return 0;}/*所有字母都已经匹配到了 判断是否存在改单词*/if (p->cnt == 1) // 存在return 1;else // 不存在返回0return 0;
}
int main()
{int n, m;char s[11];while (~scanf("%d %d", &n, &m)){if (m == 0 && n == 0)break;top = 0;tree *root = creat();for (int i = 0; i < n; i++){scanf("%s", s);insert(root, s);}for (int i = 0; i < m; i++){scanf("%s", s);int ans = search(root, s);if (ans == 1)printf("Yes\n");elseprintf("No\n");}}return 0;
}

转载于:https://www.cnblogs.com/iQXQZX/p/10258769.html

SDUTOJ2828_字典树相关推荐

  1. hdu5296 01字典树

    根据二进制建一棵01字典树,每个节点的答案等于左节点0的个数 * 右节点1的个数 * 2,遍历整棵树就能得到答案. AC代码: #include<cstdio> using namespa ...

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

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

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

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

  4. HDU6964 I love counting (字典树+莫队)

    题意: 给定一个长度为 nnn 的序列c,qc,qc,q 次询问,每次给出l,r,a,bl,r,a,bl,r,a,b求在[l,r][l,r][l,r]中有多少种不同的值 kkk 满足 k⊕a≤b​.k ...

  5. Beautiful Subarrays (01字典树 瞎搞)

    题意: 题解: 一看问的是子序列,并且还是异或. 首先想到01字典树,再一看让你求子序列的个数,大致是想让你把这个序列进行前缀异或处理后然后再01字典树上进行操作吧. 假设01字典树往左边是0右边是1 ...

  6. CF888G Xor-MST (01字典树+MST)

    题意: 给你n个数,每个数有一个值. 问你这n个数的最小生成树为多少,两点之间的边权为异或值. 题解: 参考了洛谷上的一个题解,总觉得这样的时间复杂度会爆炸,但是确确实实没爆炸. 我们每次去合并两个点 ...

  7. Perfect Security (01字典树删除点)

    题意: 第一行给你一个n 第二行给你n个数字 分别是a[1],a[2]-a[n]. 第三行给你n个数字 分别是b[1],b[2]-b[n]. 问:第三行的序列可自由排列,要求排列之后的顺序 a[1] ...

  8. Vitya and Strange Lesson (01字典树)

    题意:给定一组数,然后对所有的数进行异或操作m次异或操作,问你每次操作后,没有出现过的最小的非负整数 题解: 首先需要一个性质(ab)c=a(bc); 所以我们没有必要对于所有的数进行异或操作. 我们 ...

  9. 奶牛异或(01字典树)

    题意: 让你找一个连续区间异或和最大,如果有相同的,则输出断点较小的. 题解: 01字典树,利用前缀和的思想进行求解,我们在插入前缀的同时,也在不断的更新最大值. 我们查询当前 二进制字符串与已经插入 ...

最新文章

  1. c++语言函数大全,C++函数
  2. 手机投电脑_这七个电脑软件,用过的才知道多好用!
  3. java中array,arrayList,iterator;
  4. Spring项目的按层打包已过时
  5. 《2021中国数据资产化工具市场研究报告》隆重发布
  6. 如何连接文档服务器,如何连接服务器地址
  7. thymeleaf的属性优先级
  8. 微课|中学生可以这样学Python(例6.2):列表循环左移位
  9. java更改svg图片颜色_如何使用Leaflet库填充SVG图像中的颜色
  10. 拓端tecdat|R语言中的神经网络预测时间序列:多层感知器(MLP)和极限学习机(ELM)数据分析报告
  11. 简单的MPI+Fortran95实现
  12. servlet原理及访问时序图
  13. 什么是RS232串口RS232电平
  14. 用 PS 去除图片中文字的方法
  15. OSR推出在线SSL/TLS安全测试工具
  16. 微波链路视距(Line of Sight,LOS)传播勘测
  17. html日历页面节假日_js css+html实现简单的日历
  18. 【图像识别】基于卷积神经网络实现手写汉字识别附matlab代码
  19. main()的使用说明 (一叶知秋)
  20. ndn-tools:dissect-wireshark的使用

热门文章

  1. SAP CRM中的文本类型 - Text Type
  2. Web socket广播
  3. SAP产品和3D渲染技术的结合-使用JavaScript的开源3D渲染库实现
  4. 如何在SAP C4C里使用ABSL消费第三方Restful API
  5. SAP S/4HANA CDS View的访问控制实现:DCL介绍 1
  6. 如何判断SAP CDS view的association是inner join还是outer join实现的
  7. SAP标准培训课程C4C10学习笔记(一)第一单元
  8. SAP UI5和CRM WebUI的View和Controller是如何绑定的
  9. java虚拟路由器_Java实现模拟路由功能
  10. python最小化打开exe_如何用python使GoAgent窗口打开后自动最小化以及关闭之前的py.exe窗口...