题意:

ZJM 收到了 Q老师 送来的生日礼物,但是被 Q老师 加密了。只有 ZJM 能够回答对 Q老师 的问题,Q老师 才会把密码告诉 ZJM。
Q老师 给了 ZJM 一些仅有 01 组成的二进制编码串, 他问 ZJM:是否存在一个串是另一个串的前缀。

多组数据。每组数据中包含多个仅有01组成的字符串,以一个9作为该组数据结束的标志。

对于第 k 组数据(从1开始标号),如果不存在一个字符串使另一个的前缀,输出"Set k is immediately decodable",否则输出"Set k is not immediately decodable"。
每组数据的输出单独一行。


思路:

用字典树来存储。
往字典树中依次插入每个字符串,假设当前字符串为S,则需要判断两种情况,S是否为之前某个字符串的前缀,之前是否有某个字符串是S的前缀。
第一种情况:当字符串S插入结束后,如果最后一个节点是字典树中已经存在的节点,则说明S是之前某个字符串的前缀。
第二种情况:在字符串S插入过程中,如果遇到某一个字典树中的节点是某一个字符串的结尾,则说明存在某个字符串是S的前缀。


总结:

一道用字典树求前缀问题的题目,应理解字典树的结构,在此基础上修改字典树插入的代码,解决题目。


代码:

#include <iostream>
#include <string>
#include <string.h>
using namespace std;bool ans=0;
struct trie
{static const int N=1010,charset=2;int tot,root,child[N][charset],flag[N];Trie(){memset(child,-1,sizeof(child));root=tot=0;}void clear(){memset(child,-1,sizeof(child));root=tot=0;}void insert(string str){int now=root;for(int i=0;i<str.size();i++){int x=str[i]-'0';if(child[now][x]==-1){child[now][x]=++tot;flag[now]=0;}else if(i==str.size()-1||flag[child[now][x]])ans=1;now=child[now][x];}flag[now]=1;}bool query(string str){int now=root;for(int i=0;i<str.size();i++){int x=str[i]-'0';if(child[now][x]==-1)return false;if(flag[now])return true;now=child[now][x];}return false;}
};
int main()
{string s;trie t;int zs=0;while(cin>>s){zs++;t.clear();ans=0;t.insert(s);while(cin>>s){if(s=="9")break;t.insert(s);}if(ans==1)cout<<"Set "<<zs<<" is not immediately decodable"<<endl;elsecout<<"Set "<<zs<<" is immediately decodable"<<endl;}
}

【Week15作业 B】ZJM与生日礼物【字典树】相关推荐

  1. week15作业A ZJM 与霍格沃兹

    ZJM 为了准备霍格沃兹的期末考试,决心背魔咒词典,一举拿下咒语翻译题 题库格式:[魔咒] 对应功能 背完题库后,ZJM 开始刷题,现共有 N 道题,每道题给出一个字符串,可能是 [魔咒],也可能是对 ...

  2. 程序设计思维与实践 Week15 作业A - ZJM 与霍格沃兹

    题意: ZJM 为了准备霍格沃兹的期末考试,决心背魔咒词典,一举拿下咒语翻译题 题库格式:[魔咒] 对应功能 背完题库后,ZJM 开始刷题,现共有 N 道题,每道题给出一个字符串,可能是 [魔咒],也 ...

  3. Week15 作业 A - ZJM 与霍格沃兹 HDU - 1880

    题目 ZJM 为了准备霍格沃兹的期末考试,决心背魔咒词典,一举拿下咒语翻译题 题库格式:[魔咒] 对应功能 背完题库后,ZJM 开始刷题,现共有 N 道题,每道题给出一个字符串,可能是 [魔咒],也可 ...

  4. Week15 作业A - ZJM 与霍格沃兹

    题目描述 给出一系列二元组:[原字符串] 翻译字符串: 进行若干次查询,给出原字符串或翻译字符串,输出对应的翻译字符串或原字符串. 输入 首先给出若干行,每行一个二元组:[原字符串] 翻译字符串: 最 ...

  5. [week15] B - ZJM与生日礼物(选做)—— 字典树

    文章目录 题意 Input Output 输入样例 输出样例 提示 分析 总结 代码 题意 ZJM 收到了 Q老师 送来的生日礼物,但是被 Q老师 加密了.只有 ZJM 能够回答对 Q老师 的问题,Q ...

  6. 字典树 ZJM 与生日礼物

    题意: ZJM 收到了 Q老师 送来的生日礼物,但是被 Q老师 加密了.只有 ZJM 能够回答对 Q老师 的问题,Q老师 才会把密码告诉 ZJM. Q老师 给了 ZJM 一些仅有 01 组成的二进制编 ...

  7. ZJM 与生日礼物(字典树)

    问题描述 ZJM 收到了 Q老师 送来的生日礼物,但是被 Q老师 加密了.只有 ZJM 能够回答对 Q老师 的问题,Q老师 才会把密码告诉 ZJM. Q老师 给了 ZJM 一些仅有 01 组成的二进制 ...

  8. ZJM与生日礼物【字典树】

    问题描述 ZJM 收到了 Q老师 送来的生日礼物,但是被 Q老师 加密了.只有 ZJM 能够回答对 Q老师 的问题,Q老师 才会把密码告诉 ZJM. Q老师 给了 ZJM 一些仅有 01 组成的二进制 ...

  9. 第十五周作业——ZJM与生日礼物

    ZJM与生日礼物 一.题目 ZJM 收到了 Q老师 送来的生日礼物,但是被 Q老师 加密了.只有 ZJM 能够回答对 Q老师 的问题,Q老师 才会把密码告诉 ZJM. Q老师 给了 ZJM 一些仅有 ...

最新文章

  1. mysql客户端指令_mysql command line client(mysql命令行客户端)
  2. php+mysql 注入基本过程
  3. 《单线程的build hash table、write rows to chunks、hash join的步骤以及流程图》
  4. Hadoop联姻Excel: 微软巩固Office帝国
  5. oracle使一个字段自增,Oracle数据库实现一个字段自增
  6. Python输出帮助文档的方法及命令详解
  7. 2月12 CNN结构特征+Faster R-CNN
  8. 第三章CDMA的原理和应用(1)
  9. Diffusion Models:生成扩散模型
  10. MATLAB 格拉布斯准则代码
  11. 1.4 批量生成Oracle建表语句
  12. 我给来大家介绍一下秉承WEB2.0理念的无书网(nonobo.com)的近况
  13. 深度学习领域,你心目中 idea 最惊艳的论文是哪篇?
  14. centos安装phpstudy(小皮)
  15. 电脑W ndoWs未能启动怎么办,Win7系统电脑开机显示“Windows未能启动”的解决方法...
  16. 程序员你可以考虑安装的15款谷歌插件
  17. 【转】对Android开发者有益的40条优化建议
  18. UNI-APP安卓本地打包详细教程(保姆级)
  19. 爱奇艺播放技术——300ms背后的故事
  20. 边缘计算在视频直播场景的应用与实践

热门文章

  1. 减库存怎么处理 java_java减库存
  2. 简约至上的产品设计(2)愿景是简单的指南
  3. 开始Python的新手教程
  4. BI神器Power Query(10)-- PQ从文件夹导入数据
  5. 下列4组数据类型中 c语言允许的一组是,下列4组数据类型中,C语言允许的一组是...
  6. 为什么角膜塑形镜的价格比隐形眼镜贵这么多?
  7. 工作站 linux系统安装win7,Dell T7500工作站 Win7/RHEL5.5双系统启动菜单修复
  8. ggplot2画histogram(坐标轴刻度值字体大小,坐标轴标题字体大小,柱形宽度,大标题字体大小、居中)...
  9. Linux文件系统管理——创建与检测
  10. MTK方案 联通PON入围测试分享