题目大意:输入一系列的字符串,判断这些字符串中是否存在其中的一个字符串是另外一个字符串的前缀。。

如果是,输出Set 。。 is not immediately decodable

否则输出Set .. is immediately decodable

说的通俗点,就是判断一个字符串是否是两外一个字符串的前缀

解题思路:

这是一道字典树的题。一开始的时候,我用c/c++来写,然后是100行写完了,就是不知道哪里错了

这时,我实在忍不住了。直接就用java来写了

代码如下:(注意以下代码在submit的时候是需要对格式改一下的。。。但我这里可懒得改了)

package com.njupt.acm;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Scanner;
import java.util.Set; public class HDU_1305 { public static void main(String[] args) {
Scanner scanner = new Scanner(System.in); int counter = 1;
while (scanner.hasNext()) {
Set set = new HashSet();
String str = scanner.next();
boolean flag = true; set.add(str);
while (scanner.hasNext()) {
str = scanner.next();
if (str.equals("9")) {
if(flag){
System.out.println("Set "+(counter++)+" is immediately decodable");
}else{
System.out.println("Set "+(counter++)+" is not immediately decodable");
}
break;
}
Iterator<String> iter = set.iterator();
while (iter.hasNext()) {
String str1 = iter.next();
if (str.startsWith(str1) || str1.startsWith(str)) {
flag = false;
break;
}
}
if(flag){
set.add(str);
}
}
}
}
}

以下附上让人心碎的c/c++代码

/*
* 1305_1.cpp
*
* Created on: 2013年8月24日
* Author: Administrator
*/ #include <iostream> using namespace std; const int maxn = 2;
struct node {
int count;
node* next[maxn];
}; node* root;
node* newset() {
node* current;
current = (node*) malloc(sizeof(node)); int i;
for (i = 0; i < maxn; ++i) {
current->next[i] = NULL;
} current->count = 1;
return current;
} void insert(char* s) {
node* current;
int len = strlen(s);
if (len == 0) {
return;
}
current = root; int i;
for (i = 0; i < len; ++i) {
if (current->next[s[i] - '0'] != NULL) {
current = current->next[s[i] - '0'];
current->count = current->count + 1;
} else {
current->next[s[i] - '0'] = newset();
current = current->next[s[i] - '0'];
}
}
} int find(char* s) {
node* current;
int len = strlen(s);
if (len == 0) {
return 0;
}
current = root; int i;
for (i = 0; i < len; ++i) {
if (current->next[s[i] - '0'] != NULL) {
current = current->next[s[i] - '0'];
} else {
return 0;
}
} return current->count;
} int main() {
char str[15][15];
int line = 0, count = 1; while (scanf("%s", str[line]) != EOF) {
root = newset();
line = 0;
bool flag = true;
insert(str[line++]);
while (scanf("%s", str[line]) != EOF) {
if (str[line][0] == '9') {
break;
}else{
insert(str[line++]);
} } int i;
for (i = 0; i < line; ++i) {
if (find(str[i]) > 1) {
flag = false;
break;
}
} if (flag) {
printf("Set %d is immediately decodable\n", count++);
} else {
printf("Set %d is not immediately decodable\n", count++);
} } delete root;
}

(step5.1.2)hdu 1305(Immediate Decodability——字典树)的更多相关文章

  1. hdu 1305 Immediate Decodability(字典树)

    Immediate Decodability Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/O ...

  2. hdu 1671 Phone List 字典树

    // hdu 1671 Phone List 字典树 // // 题目大意: // // 有一些电话号码的字符串长度最多是10,问是否存在字符串是其它字符串的前缀 // // // 解题思路: // ...

  3. hdu 1305 Immediate Decodability

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1305 字典树裸题,如下: #include<algorithm> #include< ...

  4. hdu 1251 统计难题 (字典树入门题)

    /******************************************************* 题目: 统计难题 (hdu 1251) 链接: http://acm.hdu.edu. ...

  5. HDU 5536 Chip Factory 字典树

    Chip Factory Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid= ...

  6. HDU 1298 T9(字典树+dfs)

    http://acm.hdu.edu.cn/showproblem.php?pid=1298 题意:模拟手机9键,给出每个单词的使用频率.现在给出按键的顺序,问每次按键后首字是什么(也就是要概率最大的 ...

  7. HDU 2846 Repository(字典树,每个子串建树,*s的使用)

    Repository Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total ...

  8. HDU 1298 T9【字典树增加||查询】

    任意门:http://acm.hdu.edu.cn/showproblem.php?pid=1298 T9 Time Limit: 2000/1000 MS (Java/Others)    Memo ...

  9. HDU 5536 Chip Factory 字典树+贪心

    给你n个数,a1....an,求(ai+aj)^ak最大的值,i不等于j不等于k 思路:先建字典树,暴力i,j每次删除他们,然后贪心找k,再恢复i,j,每次和答案取较大的,就是答案,有关异或的貌似很多 ...

随机推荐

  1. API通用设计原则

    什么是好的API? ·        完备(Be Complete) 对确定重点支持的用户场景具有完备的功能支持.就是说,用户通过对一组API的调用能够完成预期的功能. ·        不冗余(Be ...

  2. QWidget类中默认是忽略inputMethodEvent事件(要获取输入的内容就必须使用这个事件)

    因为项目的需要以及主管的要求,准备将工程移植到Qt中,这样就可以比较容易的实现跨平台了.因为之前工程是在windows下开发的,第一个平台又是mobile所以除了底层框架之外其他的都是使用的windo ...

  3. ASP漏洞+SQL注入的入侵方法

    本文就是想对装上了防火墙的主机,进行入侵攻击的大概思路小结一下. 首先当然是用扫描器对这台服务器(以下简称主机A)进行常规的扫描,得到初步的信息.再用nmap -sS IP -P0 -p 139 ,透 ...

  4. 《Swift Programming Language 》——Swift中怎样使用继承(Inheritance)

    一个类能够继承(inherit)还有一个类的方法(methods),属性(property)和其他特性.当一个类继承其他类时,继承类叫子类(subclass),被继承类叫超类(或父类,supercla ...

  5. Twenty Newsgroups Classification任务之二seq2sparse

    seq2sparse对应于mahout中的org.apache.mahout.vectorizer.SparseVectorsFromSequenceFiles,从昨天跑的算法中的任务监控界面可以看到 ...

  6. iOS- 如何集成支付宝

    链接地址:http://www.cnblogs.com/qingche/p/3556365.html 现在不少app内都集成了支付宝功能   使用支付宝进行一个完整的支付功能,大致有以下步骤: 1&g ...

  7. 重操JS旧业第十一弹:BOM对象

    BOM对象即浏览器内置对象,现今流行的浏览器内核有Safri,Firefox,Chrome,Opera,IE其中IE的兼容性是最蛋疼的在10及其过后还好点,但是现在IE基本上淘汰,而国内像360这种垃 ...

  8. uvc摄像头代码解析6

    10.扫描视频设备链和注册视频设备 10.1 uvc视频链 struct uvc_video_chain { //uvc视频链 struct uvc_device *dev; //uvc设备 stru ...

  9. JavaScript编程:javaScript核心基础语法

    1.javaScript核心基础语法: javaScript技术体系包含了5个内容:          1.核心语言定义:          2.原生对象和雷子对象:          3.浏览器对象 ...

  10. Oracle性能分析7:创建索引

    在创建索引时,我们往往希望可以预估索引大小,以评估对现有project环境的影响,我们也希望创建索引的过程可以最小化的影响我们正在执行的project环境,并能查看索引的状况. 预估索引大小 预估索引 ...