• (step5.1.2)hdu 1305(Immediate Decodability——字典树)


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

    如果是,输出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
    ", count++);
    			} else {
    				printf("Set %d is not immediately decodable
    ", count++);
    			}
    
    		}
    
    		delete root;
    }
    



  • 相关阅读:
    Blender文档翻译-Blender库数据的通用属性
    Blender文档翻译-什么是Ghash?
    PythonQt
    QT与Python混合编程经验记录
    WebStorm开发ReactNative过程中导入插件设置智能提示
    原生iOS项目导入ReactNative,各种问题
    关于网易七鱼iOS 端集成
    iOS "_OBJC_CLASS_$_JPUSHService", referenced from: 解决办法
    同时安装使用 两个Xcode切换的一些问题。
    实现一个iOS项目中添加多个target,并制作马甲包。
  • 原文地址:https://www.cnblogs.com/riskyer/p/3279693.html
Copyright © 2020-2023  润新知