w15作业--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"。
每组数据的输出单独一行
样例输入:
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 与生日礼物(选做)相关推荐
- 第十五周作业——ZJM与生日礼物
ZJM与生日礼物 一.题目 ZJM 收到了 Q老师 送来的生日礼物,但是被 Q老师 加密了.只有 ZJM 能够回答对 Q老师 的问题,Q老师 才会把密码告诉 ZJM. Q老师 给了 ZJM 一些仅有 ...
- 课下作业(选做)第八周
课下作业(选做)第八周 课上内容补做: 由于我的电脑之前始终不能连接上数据库,无法通过http://localhost来进入,总是显示服务器被拒绝,导致当时我没能做出.后来,查阅了许多资料并在王老师的 ...
- [week15] C - ZJM与纸条(选做)—— KMP算法
文章目录 题意 Input Output 输入样例 输出样例 提示 分析 总结 代码 题意 ZJM 的女朋友是一个书法家,喜欢写一些好看的英文书法.有一天 ZJM 拿到了她写的纸条,纸条上的字暗示了 ...
- 20175330 数据结构-单链表(选做)
要求 参见附件,补充MyList.java的内容,提交运行结果截图(全屏) 课下推送代码到码云 ``` public class MyList { public static void mai ...
- 20175330 数据结构-排序(选做)
要求 在数据结构和算法中,排序是很重要的操作,要让一个类可以进行排序,有两种方法: 有类的源代码,针对某一成员变量排序,让类实现Comparable接口,调用Collection.sort(List) ...
- 下列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 ...
- python实验报告代写_TensorFlow作业代写、代做Python程序语言作业、代写github课程作业、Python实验作业代写...
TensorFlow作业代写.代做Python程序语言作业.代写github课程作业.Python实验作业代写 日期:2019-07-10 10:34 Python Practical Examine ...
- 代写python作业费用标准_代做159.272作业、代写Programming Paradigms作业、代做Python实验作业、代写Java/c++编程作业代写Database|代做R...
代做159.272作业.代写Programming Paradigms作业.代做Python实验作业.代写Java/c++编程作业代写Database|代做RComputational Thinkin ...
- 作业指导书分析怎么做?制作作业指导书分析的软件有哪些?
作业指导书分析是企业员工行为准则的标准,在企业中起着至关重要的作用.作业指导书分析怎么做?掌握以下几点就能轻松搞定. 1.绘制作业流程图.所谓流程图,就是根据企业现有的设备和工艺以及产品的生产流程,标 ...
最新文章
- Jsoncpp 使用方法解析
- 使用MSBuild实现完整daily build流程
- 『原创』+『参考』基于PPC的图像对比程序——使用直方图度量
- ASP 调用dll(VB)及封装dll实例
- Java中String、StringBuffer、StringBuilder三者的区别
- arm汇编指令集_1. 从0开始学ARM安装Keil MDK uVision集成开发环境
- 【BZOJ3616】War,KD树+bitset压位
- “方法X对于类型Y是模糊的” Java模糊方法调用null错误
- thinkPHP定义路由
- Linux网络编程---htons函数的使用
- Redis 锁的实现方案
- 鸿蒙系统的正式推送范围,华为鸿蒙系统或6月正式推送升级,手机版已开始小范围推送...
- 获取枚举类型的字符串
- 小程序毕设作品之微信小程序点餐系统毕业设计(1)开发概要
- 2013总结-2014计划
- (PhotoShop)如何用PS给证件照换底色(目前换底最成功的一个教程)
- R 语言图形函数 par()参数应用举例
- STM32F303RE 四个ADC同步规则采样
- unity传统文化交互以及摄像头移动和旋转
- 怎样把pdf转换成excel转换器