Trie树 POJ1056 IMMEDIATE DECODABILITY

题目:http://poj.org/problem?id=1056

题意:判断是否有串是其他串的前缀

?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

#include<algorithm>

#include<stdio.h>

#include<iostream>

#include<set>

#include<map>

#include<queue>

#include<stack>

#include<string.h>

using
namespace std;

struct
Node

{

    int
cnt;Node * next[50];

}e[111111];

int
len=0;

Node * newnode()

{

    memset(&e[len],0,sizeof(e[len]));

    return
&e[len++];

}

void
Insert(char
*s,Node *root)

{

    int
len=strlen(s);

    for(int
i=0;i<len;i++){

        int
cc=s[i]-‘0‘;

        if(!root->next[cc]){

            root->next[cc]=newnode();

        }

        root->cnt++;

        root=root->next[cc];

    }

    root->cnt++;

}

int
Find(char
*s,Node *root)

{

    int
len=strlen(s);

    for(int
i=0;i<len;i++){

        int
cc=s[i]-‘0‘;

        root=root->next[cc];

    }

    if(root->cnt>1)

    return
1;

    else

        return
0;

}

char
str[1005][1005];

int
main()

{

    int
i=-1;int
ret=1;int
flag=0;Node *root=newnode();

    while(scanf("%s",&str[++i])!=EOF){

        Insert(str[i],root);

        if(strcmp(str[i],"9")==0){

            for(int
j=0;j<i;j++){

                if(Find(str[j],root)){

                    flag=1;

                    printf("Set %d is not immediately decodable\n",ret++);break;

                }

            }

            if(flag==0){

                printf("Set %d is immediately decodable\n",ret++);

            }

            i=-1;len=0;flag=0;root=newnode();

        }

    }

    return
0;

}

  

时间: 2024-11-08 21:19:49

Trie树 POJ1056 IMMEDIATE DECODABILITY的相关文章

Immediate Decodability[UVA644](Trie树入门)

传送门 题意:给出一些数字串,判断是否有一个数字串是另一个串的前缀. 这题真的可以算是Trie树的一道模板题了. 先把Trie树建好,建树的时候记录一个sum表示一个节点有多少个串会包含此节点,然后再记录一个end表示这个节点是不是一个串的结尾. 然后dfs/bfs遍历整个Trie树若一个节点x满足end[x]=true && sum[x]>=2则题目条件成立. #include <iostream> #include <cstdio> #include &l

poj 1056 Trie树判断哈夫曼编码是否合法

理解了Trie树然后就能1A   其实估计这个题随便做做就能A掉,可能不需要高级数据. 先贴吉林大学的代码模板 /*==================================================*| Trie树(k叉) | INIT: init(); | 注: tree[i][tk]>0时表示单词存在, 当然也可赋予它更多含义; \*==================================================*/ const int tk = 26,

poj3630 Phone List (trie树模板题)

Phone List Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 26328   Accepted: 7938 Description Given a list of phone numbers, determine if it is consistent in the sense that no number is the prefix of another. Let's say the phone catalogu

跳跃表,字典树(单词查找树,Trie树),后缀树,KMP算法,AC 自动机相关算法原理详细汇总

第一部分:跳跃表 本文将总结一种数据结构:跳跃表.前半部分跳跃表性质和操作的介绍直接摘自<让算法的效率跳起来--浅谈"跳跃表"的相关操作及其应用>上海市华东师范大学第二附属中学 魏冉.之后将附上跳跃表的源代码,以及本人对其的了解.难免有错误之处,希望指正,共同进步.谢谢. 跳跃表(Skip List)是1987年才诞生的一种崭新的数据结构,它在进行查找.插入.删除等操作时的期望时间复杂度均为O(logn),有着近乎替代平衡树的本领.而且最重要的一点,就是它的编程复杂度较同类

Trie树学习2

数组实现的Trie树 字符容量有限,可以使用链表实现更为大容量的Trie #include <iostream> #include <cstdio> #include <string> #include <cstring> #include <vector> #include <map> #include <set> #include <algorithm> #include <cstdlib> #

trie树(字典树)

1. trie树,又名字典树,顾名思义,它是可以用来作字符串查找的数据结构,它的查找效率比散列表还要高. trie树的建树: 比如有字符串"ab" ,"adb","adc"   可以建立字典树如图: 树的根节点head不存储信息,它有26个next指针,分别对应着字符a,b,c等.插入字符串ab时,next['a'-'a']即next[0]为空,这是申请一个结点放在next[0]的位置,插入字符串db时,next['d'-'a']即next[3]

Trie树

Trie树,即字典树或单词查找树,主要用于大量字符串的检索.去重.排序等操作. 主要原理就是利用字符串的公共前缀建立一棵多叉树,牺牲空间换取时间. 1 //Trie树 2 #include <iostream> 3 #include <string> 4 using std::cin; 5 using std::cout; 6 using std::endl; 7 using std::string; 8 9 const int SIZE = 26; 10 const char B

bzoj4103异或运算 可持久化trie树

要去清华冬令营了,没找到2016年的题,就先坐一坐15年的. 因为n很小,就按照b串建可持久化trie树,a串暴力枚举. 其他的直接看代码. #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; inline int read() { int x=0,f=1,ch=getchar(); while(ch<'0'||ch

hihoCoder 1014 Trie树

#1014 : Trie树 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上一同前进. 这一天,他们遇到了一本词典,于是小Hi就向小Ho提出了那个经典的问题:“小Ho,你能不能对于每一个我给出的字符串,都在这个词典里面找到以这个字符串开头的所有单词呢?” 身经百战的小Ho答道:“怎么会不能呢!你每给我一个字符串,我就依次遍历词典里的所有单词,检查你给我的字