题意:

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"。

每组数据的输出单独一行

样例输入:

01
10
0010
0000
9
01
10
010
0000
9

样例输出:

Set 1 is immediately decodable
Set 2 is not immediately decodable

思路:

(1)题意分析:一个字符串和一个字符串集合匹配,因此考虑使用字典树
先记录一下字典树的模板:

struct Trie{static const int N=1010,num=2;int tot,root,child[N][num],flag[N];Trie(){memset(child,-1,sizeof(child));root=tot=0;}void init(){memset(child,-1,sizeof(child));root=tot=0;}void insert(string s){int now=root;bool jud=false;for(int i=0;s[i];i++){int x=s[i]-'a';if(child[now][x]==-1){child[now][x]=++tot;flag[now]=0;}now=child[now][x];}flag[now]=1;}bool query(string s){int now=root;for(int i=0;s[i];i++){int x=s[i]-'a';if(child[now][x]==-1) return false;if(flag[now]) return true;now=child[now][x];}return false;}
};

(2)本题做法:
往字典树中依次插入每个字符串,假设当前字符串为 S
有两种情况需要判断:
S 是否为之前某个字符串的前缀
之前是否有某个字符串是 S 的前缀

对于 S 是否为之前某个字符串的前缀 :
当字符串 S 插入结束后,其最后一个节点是字典树中已经存在的节点,则说明 S 为之前某个字符串的前缀
对于之前是否有某个字符串是 S 的前缀:
在字符串 S 插入过程中,如果遇到某一个字典树中的节点为某一个字符串的结尾,则说明存在某个字符串是 S 的前缀

这里修改一下上述模板中的insert代码即可

bool insert(string s){int now=root,l=s.size();bool jud=false;for(int i=0;i<l;i++){int x=s[i]-'0';if(child[now][x]==-1){child[now][x]=++tot;flag[now]=0;}else if(i==l-1||flag[child[now][x]]) jud=true;now=child[now][x];}flag[now]=1;return jud;}

代码:

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

w15作业--ZJM 与生日礼物(选做)相关推荐

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

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

  2. 课下作业(选做)第八周

    课下作业(选做)第八周 课上内容补做: 由于我的电脑之前始终不能连接上数据库,无法通过http://localhost来进入,总是显示服务器被拒绝,导致当时我没能做出.后来,查阅了许多资料并在王老师的 ...

  3. [week15] C - ZJM与纸条(选做)—— KMP算法

    文章目录 题意 Input Output 输入样例 输出样例 提示 分析 总结 代码 题意 ZJM 的女朋友是一个书法家,喜欢写一些好看的英文书法.有一天 ZJM 拿到了她写的纸条,纸条上的字暗示了 ...

  4. 20175330 数据结构-单链表(选做)

    要求 参见附件,补充MyList.java的内容,提交运行结果截图(全屏) 课下推送代码到码云 ``` public class MyList {     public static void mai ...

  5. 20175330 数据结构-排序(选做)

    要求 在数据结构和算法中,排序是很重要的操作,要让一个类可以进行排序,有两种方法: 有类的源代码,针对某一成员变量排序,让类实现Comparable接口,调用Collection.sort(List) ...

  6. 下列python语言、返回结果不是uc_MKAN1-UC 5103作业代写、代做Analytics作业、Java,Python,c/c++程序语言作业代做...

    MKAN1-UC 5103作业代写.代做Analytics作业.Java,Python,c/c++程序语言作业代做 日期:2020-05-21 11:08 Marketing Analytics Sp ...

  7. python实验报告代写_TensorFlow作业代写、代做Python程序语言作业、代写github课程作业、Python实验作业代写...

    TensorFlow作业代写.代做Python程序语言作业.代写github课程作业.Python实验作业代写 日期:2019-07-10 10:34 Python Practical Examine ...

  8. 代写python作业费用标准_代做159.272作业、代写Programming Paradigms作业、代做Python实验作业、代写Java/c++编程作业代写Database|代做R...

    代做159.272作业.代写Programming Paradigms作业.代做Python实验作业.代写Java/c++编程作业代写Database|代做RComputational Thinkin ...

  9. 作业指导书分析怎么做?制作作业指导书分析的软件有哪些?

    作业指导书分析是企业员工行为准则的标准,在企业中起着至关重要的作用.作业指导书分析怎么做?掌握以下几点就能轻松搞定. 1.绘制作业流程图.所谓流程图,就是根据企业现有的设备和工艺以及产品的生产流程,标 ...

最新文章

  1. c# 中如何定义和接收消息
  2. Linux存储的基本管理
  3. python 惰性_Django中的“惰性翻译”方法的相关使用
  4. android文件加解密开发,Android文件加密解密的实现
  5. 连续设置多张背景图片并且平铺
  6. [C++11]forward完美转发
  7. linux打开另一台linux的图形化,【工具大道】ssh登录Linux服务器,并显示图形化界面...
  8. K8S精华问答 | 应用和运行时平台是怎样解耦的?
  9. form表单reset报 reset is not a function
  10. 前端培训什么机构好?有什么好的学习方法能少走弯路?
  11. 机器学习-斯坦福:学习笔记7-最优间隔分类器问题
  12. 三分钟快速理解javascript内存管理
  13. C 语言基础——程序运行时间的计算
  14. 我的实例我做主--ECS运维必读
  15. 机器学习算法基础4-K-近邻算法、朴素贝叶斯算法、分类模型评估、模型的选择与调优
  16. python 批量修改文件夹和子文件夹的名称
  17. 独立开发者能够从这位作家身上学些什么
  18. 数字逻辑——时序逻辑电路
  19. matlab画图五角星标记,Matlab---画图线型、符号及颜色
  20. python压缩文件tar_python 实现tar文件压缩解压的实例详解

热门文章

  1. Can not construct instance of com.h.dog.entity.Message: no int/Int-argument constructor/factory meth
  2. [ssh新闻发布系统五]删除新闻
  3. oracle 修改字符集 修改为ZHS16GBK
  4. IGDATaiwan上Unity 优化讲座III
  5. sql入门--增删改查
  6. 超赞!60种数据可视化图表使用场景及制作工具整理大全 !
  7. word 2013 并列显示两张图片(且各自带有题注)
  8. e智团队实验室项目-第一周-神经网络的学习
  9. Elasticsearch学习1 入门进阶 Linux系统下操作安装Elasticsearch Kibana 初步检索 SearchAPI Query DSL ki分词库 自定义词库
  10. 邯郸北方计算机学校广平区,邯郸北方汽修学校25周年校庆暨2018家长会圆满成功...