POJ_1056_IMMEDIATE DECODABILITY_Trie树
来源:互联网 发布:db2数据库 编辑:程序博客网 时间:2024/06/04 20:01
又是一道简单的字典树问题。题目意思是给多组由9结尾的二进制数(9不包括在内),分别询问这每一组二进制数中是否存在一个数为另一个数的前缀。若没有,则可以快速解码,若有,则不能快速解码。对于每一组数据输出结果。
如题,二进制的话仅有0和1两个数,字典树就是一棵二叉树,因此判断是否存在前缀只要看是否存在一个数的最末一位还有子节点(判断两个即可)。
然后注意读到9之后要初始化各个数组与参数。
附:trie树函数注释http://blog.csdn.net/NeoDQ/article/details/49593539
(都是裸题啊……)
#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int N =5005;int tr[N][3],n,t;bool p[N];char s[45];int trie(char w[]){ int loc=0; for (int i=0;w[i];i++) { int x=tr[loc][w[i]-'0']; if (x==-1) tr[loc][w[i]-'0']=++t; loc=tr[loc][w[i]-'0']; } return loc;}int main(){ n=1; t=0; memset (tr,-1,sizeof(tr)); memset (p,false,sizeof(p)); while (scanf ("%s",s)!=EOF) { if (s[0]=='9') { bool k=false; for (int i=1;i<=t;i++) { if (p[i]) if (tr[i][0]!=-1||tr[i][1]!=-1) { k=true; break; } } if (!k) printf("Set %d is immediately decodable\n",n); else printf("Set %d is not immediately decodable\n",n); n++; memset (tr,-1,sizeof(tr)); memset (p,false,sizeof(p)); t=0; } else p[trie(s)]=true; } return 0;}
0 0
- POJ_1056_IMMEDIATE DECODABILITY_Trie树
- POJ_1056_IMMEDIATE DECODABILITY
- 树
- 树
- 树
- 树
- 树
- 树
- 树
- 树
- 树
- 树
- 树
- 树
- 树
- 树
- 树
- 树
- HDOJ 1096 A+B for Input-Output Practice (VIII)
- win10 不能修改 host 文件
- Leetcode_c++:Pascal's TriangleII (119)
- 好用的linux系统管理脚本
- android /system/vold源码分析(5)
- POJ_1056_IMMEDIATE DECODABILITY_Trie树
- Matlab find函数用法,全面解析
- dedecms整合美图秀秀实现图片上传效果
- BZOJ 1072 排列
- Android 2016新技术
- 动态规划2-Charm Bracelet(算法基础 第5周)
- 设计模式(2)——抽象工厂模式
- JavaI/O(一)--字符流
- 孤独与寂寞的存在