• 数据结构之Trie树


    http://dongxicheng.org/structure/trietree/

    http://hi.baidu.com/piaoshi111/item/ad5f7c12ca63f38889a95622

    http://poj.org/problem?id=3630

    刚开始套字典树 将字符串末尾标记 查询到末尾时标记 动态的 超时了 参考着别人的写了个静态的 过了 172MS

    View Code
     1 #include<iostream>
     2 #include<stdio.h>
     3 #include<string.h>
     4 using namespace std;
     5 struct node
     6 {
     7     int count;
     8     int next[11];
     9     
    10 }tr[100010];
    11 int flag,num;
    12 void node1()
    13 {
    14     tr[num].count = 0;
    15     memset(tr[num].next,0,sizeof(tr[num].next));
    16 }
    17 void creat(char *str)
    18 {
    19     int i,j,k=strlen(str),d;
    20     int f = 0,x = 0;
    21     for(i = 0 ; i < k  ;i++)
    22     {
    23         d = str[i]-48;        
    24         if(!f&&tr[x].count==1)
    25         {
    26             flag = 0;
    27         }
    28         if(tr[x].next[d] == 0)
    29         {
    30             num++;
    31             node1();
    32             tr[x].next[d] = num;                    
    33             f = 1;
    34         }
    35         x = tr[x].next[d];                    
    36     }
    37     if(!f)
    38         flag = 0;
    39     tr[num].count = 1;
    40 }
    41 int main()
    42 {
    43     int i,j,k,n,t;
    44     char c[11];
    45     scanf("%d",&t);
    46     while(t--)
    47     {
    48         scanf("%d%*c",&n);
    49         memset(tr,0,sizeof(tr));
    50         flag = 1;
    51         num = 0;
    52         while(n--)
    53         {
    54             gets(c);
    55             if(flag)
    56             creat(c);
    57         }
    58         if(flag)
    59             printf("YES\n");
    60         else
    61             printf("NO\n");
    62     }
    63     return 0;
    64 }

     动态的 会超时

    View Code
     1 #include<iostream>
     2 #include<stdio.h>
     3 #include<string.h>
     4 using namespace std;
     5 struct node
     6 {
     7     int count;
     8     node *next[11];
     9     node()
    10     {
    11         count = 0;
    12         memset(next,NULL,sizeof(next));
    13     }
    14 };
    15 int flag;
    16 void creat(char *str,struct node *root)
    17 {
    18     int i,j,k=strlen(str),d;
    19     int f = 0;
    20     struct node *p = root;
    21     for(i = 0 ; i < k  ;i++)
    22     {
    23         d = str[i]-48;
    24         if(!f&&p->count == 1)
    25         {
    26             flag = 0;
    27         }
    28         if(p->next[d] == NULL)
    29         {
    30             p->next[d]=new node;
    31             f = 1;
    32         }            
    33         p = p->next[d];
    34     }
    35     if(!f)
    36         flag = 0;
    37     p->count = 1;
    38 }
    39 int main()
    40 {
    41     int i,j,k,n,t;
    42     char c[11];
    43     scanf("%d",&t);
    44     while(t--)
    45     {
    46         scanf("%d%*c",&n);
    47         flag = 1;
    48         struct node *root = new node;
    49         while(n--)
    50         {
    51             gets(c);
    52             if(flag)
    53             creat(c,root);
    54         }
    55         if(flag)
    56             printf("YES\n");
    57         else
    58             printf("NO\n");
    59     }
    60     return 0;
    61 }
  • 相关阅读:
    keyCode的使用
    写自已的类库需要的核心代码
    50个必备的实用jQuery代码段
    javascript基础
    给js原生Array增加each方法
    jquery中一些容易让人困惑的东西总结[转载]
    ajax编程
    oracle的正则表达式 [转载]
    eclipse 插件大全
    SlickGrid Options
  • 原文地址:https://www.cnblogs.com/shangyu/p/2603546.html
Copyright © 2020-2023  润新知