hdu 1305 Immediate Decodability(字典树)
Immediate Decodability
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 1378 Accepted Submission(s): 706
Examples: Assume an alphabet that has symbols {A, B, C, D}
The following code is immediately decodable:
A:01 B:10 C:0010 D:0000
but this one is not:
A:01 B:10 C:010 D:0000 (Note that A is a prefix of C)
10
0010
0000
9
01
10
010
0000
9
Set 2 is not immediately decodable
import java.util.Scanner;
public class Main {//字典树
private static Node node = null;
private static Node root = new Node();
private static int cases = 0;
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
while (input.hasNext()) {
root = new Node();//根节点
node = root;
++cases;
boolean ok = true;
String str = "";
while (!("9".equals((str = input.next())))) {
node = root;//返回开始节点
for (int i = 0; i < str.length(); ++i) {
if ('0' == str.charAt(i)) {// lchild,如果是0进入左孩子
if (null == node.getLchild()) {//如果左孩子是null,创建一个新根节点
Node gen = new Node();//创建新根节点
if (i == str.length() - 1) {//如果是最后一个,则标记成叶子节点
gen.setValue(true);
}
node.setLchild(gen);//向下传递
node = gen;
} else {
node = node.getLchild();//如果不为空,直接向下传递
if (node.isValue()) {//如果传递过程中出现叶子节点,则ok直接是false
ok = false;
}
}
} else {// rchild,如果是1,跟上边一样,只是把左换成右
if (null == node.getRchild()) {
Node gen = new Node();
if (i == str.length() - 1) {
gen.setValue(true);
}
node.setRchild(gen);
node = gen;
} else {
node = node.getRchild();
if (node.isValue()) {
ok = false;
}
}
}
}
}
if (ok) {//输出
System.out.println("Set " + cases + " is immediately decodable");
} else
System.out.println("Set " + cases+ " is not immediately decodable");
}
}
}
class Node {//创建二叉树
boolean value = false;
Node lchild;
Node rchild;
//一些get和set方法
public boolean isValue() {
return value;
}
public void setValue(boolean value) {
this.value = value;
}
public Node getLchild() {
return lchild;
}
public void setLchild(Node lchild) {
this.lchild = lchild;
}
public Node getRchild() {
return rchild;
}
public void setRchild(Node rchild) {
this.rchild = rchild;
}
}
hdu 1305 Immediate Decodability(字典树)的更多相关文章
- (step5.1.2)hdu 1305(Immediate Decodability——字典树)
题目大意:输入一系列的字符串,判断这些字符串中是否存在其中的一个字符串是另外一个字符串的前缀.. 如果是,输出Set .. is not immediately decodable 否则输出Set . ...
- hdu 1671 Phone List 字典树
// hdu 1671 Phone List 字典树 // // 题目大意: // // 有一些电话号码的字符串长度最多是10,问是否存在字符串是其它字符串的前缀 // // // 解题思路: // ...
- hdu 1305 Immediate Decodability
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1305 字典树裸题,如下: #include<algorithm> #include< ...
- hdu 1251 统计难题 (字典树入门题)
/******************************************************* 题目: 统计难题 (hdu 1251) 链接: http://acm.hdu.edu. ...
- HDU 5536 Chip Factory 字典树
Chip Factory Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid= ...
- HDU 1298 T9(字典树+dfs)
http://acm.hdu.edu.cn/showproblem.php?pid=1298 题意:模拟手机9键,给出每个单词的使用频率.现在给出按键的顺序,问每次按键后首字是什么(也就是要概率最大的 ...
- HDU 2846 Repository(字典树,每个子串建树,*s的使用)
Repository Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total ...
- HDU 1298 T9【字典树增加||查询】
任意门:http://acm.hdu.edu.cn/showproblem.php?pid=1298 T9 Time Limit: 2000/1000 MS (Java/Others) Memo ...
- HDU 5536 Chip Factory 字典树+贪心
给你n个数,a1....an,求(ai+aj)^ak最大的值,i不等于j不等于k 思路:先建字典树,暴力i,j每次删除他们,然后贪心找k,再恢复i,j,每次和答案取较大的,就是答案,有关异或的貌似很多 ...
随机推荐
- IE 兼容性写法
1. 条件注释语句 <!--[if !IE]><!--> 除IE外都可识别 <!--<![endif]--> <!--[if IE]> 所有的IE ...
- 【开源项目之路】jquery的build问题
在刚开始clone了jquery到本地build的时候,就遇到了问题. “ENORESTARGET No tag found that was able to satisfy ...” 提示为bowe ...
- php 的简单易用的调式方法,打印方法
简单的调试方法:echo, print_r, var_dump, exit, debug_backtrace(), debug_print_backtrace(), gettype(), get_cl ...
- oracle学习 十 数据库的语句优化(持续更)
平时关注Oracle数据库的网友都知道,Oracle性能优化保证了Oracle数据库的健壮性.下面就此提出需要注意的两个原则. 原则一:注意WHERE子句中的连接顺序: ORACLE采用自下而上的 ...
- JPA 原生态SQL 的复杂查询之createNamedQuery
JPA 原生态SQL 的复杂查询之createNamedQuery调用存储过程,返回的List字段对应的填充实体============实体类,调用存储过程====================== ...
- Flex 日期和字符串之间转换
字符串转为日期: var dateTime:Date= DateField.stringToDate(deTime, "YYYY-MM-DD");//"YYYY-MM-D ...
- JS判断是否为安卓orIOS
var u = navigator.userAgent, app = navigator.appVersion; var isAndroid = u.indexOf('Android') > - ...
- listView divider marginLeft marginRight
要实现这样的效果: 新建drawable 用inset 进行实现.代码如下: <?xml version="1.0" encoding="utf-8"? ...
- Eclipse和Android Studio中的DDMS使用时什么不同?
http://www.jb51.net/softjc/454131.html Eclipse和Android Studio中的DDMS使用时什么不同? 相信很多经常开发Android应用的朋友应该都接 ...
- How to Send Information (String, Image, Record) Between Two Applications
http://delphi.about.com/od/windowsshellapi/a/wm_copydata.htm here are many situation when you need t ...