有一天, GZS得到一本古代的英文字典, 很可惜, 由于年代久远, 很多单词都看不清楚了. 但是, 这怎么能难倒我们的G神呢, G神想要用这本字典查询一些单词, 下面给出字典中的内容. 字典中的单词全部由小写字母组成, 字迹模糊的部分用'?'或者'*'来表示, '?'可以匹配一个小写字母, '*'可以匹配0个或者1个或者多个小写字母. 例如, a?b可以代表aab, abb......azb, 而a*b可以代表ab, aab, abb...azb, aaab, aabb......然后给出一部分待查找的单词, 全部由小写字母组成. 如果能在字典中找到这个单词, 请输出1, 否则, 输出0.对于这种小事GZS觉得很是无聊, 你快来写个程序帮帮他吧.

输入

第一行包含一个整数T(T <= 1000), 表示测试数据的组数.
每组测试数据的第一行有两个整数n(0 < n < 1000) 和m (0 < m < 1000), 
分别表示字典中单词的数目和待查找的单词的数目
接下来n行, 代表字典中的单词, 每个单词由小写字母和'?'以及'*'组成, 单词长度不超过6.
接下来m行, 代表待查找的单词, 每个单词由小写字母组成, 单词长度不超过20.

输出

每组数据输出两行
第一行 Case #x:, x表示组数编号,从1开始.
第二行 对于每个待查找的单词, 如果存在于字典中, 则输出1, 否则, 输出0.

样例输入1  复制

2
2 3
*
?
abj
ab
a
3 4
ab?d
a*e
abc
abcd
abcde
ax
ae
样例输出1

Case #1:
111
Case #2:
1101

建立字典书,把可能查到的单词存到字典树上,后面直接查询。
#include <map>
#include <cstdio>
#include <cmath>
#include <queue>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;typedef struct tree{tree *next[30];int over;
}tree;tree * createTreeNode(){tree * p  = (tree *)malloc(sizeof(tree));for(int i = 0; i < 30; i++)   p->next[i] = NULL;p->over  = 0;return p;
}
bool isOver(char str[])
{for(int i = 0;str[i]; i++)if(str[i] != '*') return 0;return 1;
}
void renewTree(tree * pcur,char str[])
{if(str[0] == '\0'){pcur->over = 1;return;}int x;if(str[0] == '?')  x = 26;else if(str[0] == '*')  x = 27;else    x = str[0] -  'a';if(pcur->next[x] == NULL)pcur->next[x] = createTreeNode();pcur->over = isOver(str) || pcur->over;  // 在原来的基础上更新是否结束。renewTree(pcur->next[x],str+1);
}
bool yes;
void enquryTree(tree * pcur, char str[])
{if(yes) return;if(str[0] == '\0'){yes = pcur->over;return;}int x = str[0] - 'a';if(pcur->next[26])enquryTree(pcur->next[26] , str+1);if(pcur->next[x])enquryTree(pcur->next[x] , str+1) ;if(pcur->next[27]){int len = strlen(str);for(int i = 0; i <= len; i++)enquryTree(pcur->next[27],str+i);}
}
int ans [1010];
int main()
{int T,n,m;char str[30];scanf("%d",&T);int c = 1;while(T-- ){tree * root = createTreeNode();scanf("%d%d",&n,&m);for(int i = 0; i < n; i++){scanf("%s",str);renewTree(root,str);}int k = 0;for(int i = 0; i < m;i++){yes = 0;scanf("%s",str);enquryTree(root,str);ans[k++] = yes;}printf("Case #%d:\n",c++);for(int i = 0; i < k; i++)printf("%d",ans[i]);printf("\n");}return 0;
}

GZS与古英文字典(字典树)相关推荐

  1. 古汉语常用字字典_掌握了音序或部首查字法,就会查字典了?不,差得远着呢!...

    前一段时间,我连续写了两篇关于使用工具书的文章. 为什么要教会孩子使用工具书,我和你想的不大一样 给孩子选择合适的工具书,一定要注意哪些问题 如果说以上两篇是主要是在谈原则和方向的问题,那么本篇就是方 ...

  2. Tried树 (字典查找树)的创建

    数的创建 //字典查找树的实现 #include<iostream> using namespace std; struct Tried {int count;//用来标记该节点是个可以形 ...

  3. python列表嵌套字典取值_我的 python 学习历程-Day05 字典/字典的嵌套

    一.字典的初识 为什么要有字典 字典与列表同属容器型数据类型,同样可以存储大量的数据,但是,列表的数据关联性不强,并且查询速度比较慢,只能按照顺序存储. 什么是字典 先说一下什么叫可变与不可变的数据类 ...

  4. 676.实现一个魔法字典·前缀树

    链接:https://leetcode.cn/problems/implement-magic-dictionary/solution/by-xun-ge-v-3c60/ 来源:力扣(LeetCode ...

  5. python制作英语字典_python制作英文学习字典案列

    原博文 2020-03-04 23:01 − def rdic(): fr = open('dic.txt','r') for line in fr: line = line.replace(&quo ...

  6. 用python制作英文字典_python制作英文学习字典案列

    def rdic(): fr = open('dic.txt','r') for line in fr: line = line.replace("\n",'') v = line ...

  7. python英语字典程序-python制作英文学习字典案列

    def rdic(): fr = open('dic.txt','r') for line in fr: line = line.replace(" ",'') v = line. ...

  8. python 学习 制作英文学习字典 DAY23

    def rdic():fr = open('dic.txt','r') for line in fr:line = line.replace("\n",'')v = line.sp ...

  9. pre-做前缀的词 整理人:栗子 in zz 参考:英文字根字典by刘毅老师

    preschool 学龄前的prehistory 史前→prehistoric prefix 前缀 preposition 前置词,介词(pre+position位置→位置放在前面→前置词) prep ...

最新文章

  1. mfschunkserver安装脚本
  2. nginx学习总结五(nginx反向代理)
  3. win8/Metro开发系列二 Xaml数据绑定
  4. 越秀人民币夹层二期完成首轮关账 首期募集近10亿元...
  5. Cpp 对象模型探索 / 含有虚基类的类的内存布局
  6. 统计信号处理基础 - 估计与检测理论 估计部分习题3.7公式推导
  7. gibmacos 网络加速_黑苹果教程续集,利用EFI在线安装MacOS
  8. python文件传输socket_树莓派采用socket方式文件传输(python)
  9. CSS定位设置实例——盒子的定位
  10. 新云php修改,MySQL_新云CMS防采集的代码修改,列表页修改: 打开INC目录下Ne - phpStudy...
  11. python自动化交易通达信_通达信实现自动交易系统
  12. 高斯消元法——Matlab解线性方程组(1)
  13. chatgpt智能提效职场办公-ppt怎么蒙层
  14. 数据结构-循环双链表
  15. 线程生命周期 什么时候会出现僵死进程
  16. 正确的使用HTTP代理
  17. Redis(五)整合:SpringBoot如何整合Redis?
  18. 计算机网络三大基本的功能,Internet
  19. 全院级pacs系统中前置服务器,智慧医院全院级PACS解决方案
  20. 怎样用云服务器搭建一款可以多人联网的传奇手游

热门文章

  1. 别说你只看到庞大的中国来客,CES仍在预言2018年AI加持下的科技圈走势
  2. Cisco picks up Pari Networks
  3. 简单的天气预报app
  4. 张近东主动辞任苏宁易购董事长;斗鱼虎牙终止合并;上海排名全球航运中心城市综合实力第三 | 美通社头条...
  5. “猪”与“鸡”的寓言
  6. opencv血管分割——边缘检测
  7. CCNP总结--STP
  8. 西门子PLC S7-1500系列CPU与西门子PLC S7-300系列的通讯模块CP343-1进行TCP通讯的方法
  9. android AppCompat, splash启动白屏(黑屏)全屏,去掉状态栏,以及splash与虚拟按键遮挡
  10. 社群运营,大家都在使用哪些运营工具?