字典树
来源:互联网 发布:淘宝聚划算怎么抢最快 编辑:程序博客网 时间:2024/06/05 08:56
字典树
题目描述
遇到单词不认识怎么办? 查字典啊,已知字典中有n个单词,假设单词都是由小写字母组成。现有m个不认识的单词,询问这m个单词是否出现在字典中。
输入
含有多组测试用例。
第一行输入n,m (n>=0&&n<=100000&&m>=0&&m<=100000)分别是字典中存在的n个单词和要查询的m个单词.
紧跟着n行,代表字典中存在的单词。
然后m行,要查询的m个单词
n=0&&m=0 程序结束
数据保证所有的单词都是有小写字母组成,并且长度不超过10
输出
若存在则输出Yes,不存在输出No .
示例输入
3 2aabaaadacad0 0
示例输出
NoYes
#include <bits/stdc++.h>using namespace std;struct node{ int mark; int next[26];} pp[500010];int root,top;char a[50],b[50];int creat(){ memset(pp[top].next,-1,sizeof(pp[top].next)); pp[top].mark=0; return top++;}int xian(char c){ return c-'a';}void insert(int root,char *s){ int i; int len =strlen(s); for(i=0; i<len; i++) { if(pp[root].next[xian(s[i])]==-1) pp[root].next[xian(s[i])]=creat(); root=pp[root].next[xian(s[i])]; } pp[root].mark=1;}int search(int root,char *s){ int i; int len=strlen(s); for(i=0; i<len; i++) { if(pp[root].next[xian(s[i])]==-1) return 0; root=pp[root].next[xian(s[i])]; } return pp[root].mark;}int main(){ int n,m; while(~scanf("%d%d",&n,&m)&&n&&m) { top=0; root=creat(); for(int i=0; i<n; i++) { scanf("%s",a); insert(root,a); } for(int i=0; i<m; i++) { scanf("%s",b); if(search(root,b)) printf("Yes\n"); else printf("No\n"); } }}<pre name="code" class="cpp">#include <bits/stdc++.h> using namespace std; struct node { int flag; int next[26]; } sh[500005]; int a; int creat() { memset(sh[a].next,0,sizeof(sh[a].next)); sh[a].flag=0; return a++; } int insert(int root,char *str) { int i,len,t; len=strlen(str); for(i=0; i<len; i++) { t=str[i]-'a'; if(sh[root].next[t]==0) sh[root].next[t]=creat(); root=sh[root].next[t]; } return sh[root].flag=1; } int search(int root,char *str) { int i,len,t; len=strlen(str); for(i=0; i<len; i++) { t=str[i]-'a'; if(sh[root].next[t]==0) return 0; root=sh[root].next[t]; } return sh[root].flag; } int main() { int n,m,i,root; char str[10]; while(~scanf("%d%d",&n,&m)) { if(n==0&&m==0) break; a=0; root=creat(); for(i=0; i<n; i++) { scanf("%s",str); insert(root,str); } for(i=0; i<m; i++) { scanf("%s",str); if(search(root,str)==0) printf("No\n"); else printf("Yes\n"); } } return 0; }
0 0
- 字典树
- 字典树
- 字典树
- 字典树
- 字典树
- 字典树。。
- 字典树
- 字典树
- 字典树
- 字典树
- 字典树
- 字典树
- 字典树
- 字典树
- 字典树
- 字典树
- 字典树
- 字典树
- Codeforces Round #316 (Div. 2) E. Pig and Palindromes
- c++多态机制详细分析以及c++内存对象布局
- Servlet详解
- iOS开发-Day24-OC KVC&KVO&通知
- CLGeocode编码类的讲解
- 字典树
- 用dfs序维护树结构
- 字符串中空格换成%20
- 2367 Genealogical tree
- hdu-5023 A Corrupt Mayor's Performance Art (线段树区间修改)
- 扩展欧几里德算法详解(转)
- 最励志语句!——冲向阿里,反正光脚的不怕穿鞋的
- LCS(最长公共子序列) GST(最长公共子串,广义后缀树)
- 如何在tomcat安装部署php项目