题意:

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. Jsoncpp 使用方法解析
  2. 使用MSBuild实现完整daily build流程
  3. 『原创』+『参考』基于PPC的图像对比程序——使用直方图度量
  4. ASP 调用dll(VB)及封装dll实例
  5. Java中String、StringBuffer、StringBuilder三者的区别
  6. arm汇编指令集_1. 从0开始学ARM安装Keil MDK uVision集成开发环境
  7. 【BZOJ3616】War,KD树+bitset压位
  8. “方法X对于类型Y是模糊的” Java模糊方法调用null错误
  9. thinkPHP定义路由
  10. Linux网络编程---htons函数的使用
  11. Redis 锁的实现方案
  12. 鸿蒙系统的正式推送范围,华为鸿蒙系统或6月正式推送升级,手机版已开始小范围推送...
  13. 获取枚举类型的字符串
  14. 小程序毕设作品之微信小程序点餐系统毕业设计(1)开发概要
  15. 2013总结-2014计划
  16. (PhotoShop)如何用PS给证件照换底色(目前换底最成功的一个教程)
  17. R 语言图形函数 par()参数应用举例
  18. STM32F303RE 四个ADC同步规则采样
  19. unity传统文化交互以及摄像头移动和旋转
  20. 怎样把pdf转换成excel转换器

热门文章

  1. 快速熟悉H3 BPM的结构
  2. 处理数据中心发生的故障,应该遵循哪些原则?
  3. 关于java集合的练习
  4. 博士申请 | 纽约州立大学布法罗分校邹韶峰老师招收强化学习方向全奖博士生...
  5. 2021 CMU-15445/645 Project #3 : Query Execution
  6. brain怎么读_Brian这个英文怎么读是什么意思??
  7. Maven下的Mybatis基本配置和使用
  8. 【初入编程】自我简介
  9. Crash内核调试手段
  10. 杂谈对抽象事物的审美——繁体字与简体字,孰美?