【Week15作业 B】ZJM与生日礼物【字典树】
题意:
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与生日礼物【字典树】相关推荐
- week15作业A ZJM 与霍格沃兹
ZJM 为了准备霍格沃兹的期末考试,决心背魔咒词典,一举拿下咒语翻译题 题库格式:[魔咒] 对应功能 背完题库后,ZJM 开始刷题,现共有 N 道题,每道题给出一个字符串,可能是 [魔咒],也可能是对 ...
- 程序设计思维与实践 Week15 作业A - ZJM 与霍格沃兹
题意: ZJM 为了准备霍格沃兹的期末考试,决心背魔咒词典,一举拿下咒语翻译题 题库格式:[魔咒] 对应功能 背完题库后,ZJM 开始刷题,现共有 N 道题,每道题给出一个字符串,可能是 [魔咒],也 ...
- Week15 作业 A - ZJM 与霍格沃兹 HDU - 1880
题目 ZJM 为了准备霍格沃兹的期末考试,决心背魔咒词典,一举拿下咒语翻译题 题库格式:[魔咒] 对应功能 背完题库后,ZJM 开始刷题,现共有 N 道题,每道题给出一个字符串,可能是 [魔咒],也可 ...
- Week15 作业A - ZJM 与霍格沃兹
题目描述 给出一系列二元组:[原字符串] 翻译字符串: 进行若干次查询,给出原字符串或翻译字符串,输出对应的翻译字符串或原字符串. 输入 首先给出若干行,每行一个二元组:[原字符串] 翻译字符串: 最 ...
- [week15] B - ZJM与生日礼物(选做)—— 字典树
文章目录 题意 Input Output 输入样例 输出样例 提示 分析 总结 代码 题意 ZJM 收到了 Q老师 送来的生日礼物,但是被 Q老师 加密了.只有 ZJM 能够回答对 Q老师 的问题,Q ...
- 字典树 ZJM 与生日礼物
题意: ZJM 收到了 Q老师 送来的生日礼物,但是被 Q老师 加密了.只有 ZJM 能够回答对 Q老师 的问题,Q老师 才会把密码告诉 ZJM. Q老师 给了 ZJM 一些仅有 01 组成的二进制编 ...
- ZJM 与生日礼物(字典树)
问题描述 ZJM 收到了 Q老师 送来的生日礼物,但是被 Q老师 加密了.只有 ZJM 能够回答对 Q老师 的问题,Q老师 才会把密码告诉 ZJM. Q老师 给了 ZJM 一些仅有 01 组成的二进制 ...
- ZJM与生日礼物【字典树】
问题描述 ZJM 收到了 Q老师 送来的生日礼物,但是被 Q老师 加密了.只有 ZJM 能够回答对 Q老师 的问题,Q老师 才会把密码告诉 ZJM. Q老师 给了 ZJM 一些仅有 01 组成的二进制 ...
- 第十五周作业——ZJM与生日礼物
ZJM与生日礼物 一.题目 ZJM 收到了 Q老师 送来的生日礼物,但是被 Q老师 加密了.只有 ZJM 能够回答对 Q老师 的问题,Q老师 才会把密码告诉 ZJM. Q老师 给了 ZJM 一些仅有 ...
最新文章
- mysql客户端指令_mysql command line client(mysql命令行客户端)
- php+mysql 注入基本过程
- 《单线程的build hash table、write rows to chunks、hash join的步骤以及流程图》
- Hadoop联姻Excel: 微软巩固Office帝国
- oracle使一个字段自增,Oracle数据库实现一个字段自增
- Python输出帮助文档的方法及命令详解
- 2月12 CNN结构特征+Faster R-CNN
- 第三章CDMA的原理和应用(1)
- Diffusion Models:生成扩散模型
- MATLAB 格拉布斯准则代码
- 1.4 批量生成Oracle建表语句
- 我给来大家介绍一下秉承WEB2.0理念的无书网(nonobo.com)的近况
- 深度学习领域,你心目中 idea 最惊艳的论文是哪篇?
- centos安装phpstudy(小皮)
- 电脑W ndoWs未能启动怎么办,Win7系统电脑开机显示“Windows未能启动”的解决方法...
- 程序员你可以考虑安装的15款谷歌插件
- 【转】对Android开发者有益的40条优化建议
- UNI-APP安卓本地打包详细教程(保姆级)
- 爱奇艺播放技术——300ms背后的故事
- 边缘计算在视频直播场景的应用与实践
热门文章
- 减库存怎么处理 java_java减库存
- 简约至上的产品设计(2)愿景是简单的指南
- 开始Python的新手教程
- BI神器Power Query(10)-- PQ从文件夹导入数据
- 下列4组数据类型中 c语言允许的一组是,下列4组数据类型中,C语言允许的一组是...
- 为什么角膜塑形镜的价格比隐形眼镜贵这么多?
- 工作站 linux系统安装win7,Dell T7500工作站 Win7/RHEL5.5双系统启动菜单修复
- ggplot2画histogram(坐标轴刻度值字体大小,坐标轴标题字体大小,柱形宽度,大标题字体大小、居中)...
- Linux文件系统管理——创建与检测
- MTK方案 联通PON入围测试分享