zoukankan      html  css  js  c++  java
  • HDU 1247 Hat’s Words

    字典树模板题

    题目链接http://acm.hdu.edu.cn/showproblem.php?pid=1247

    View Code
     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <stdlib.h>
     4 #define N 26
     5 #define maxn 1000000
     6 char s[50001][101];
     7 struct node
     8 {
     9     int flag;
    10     struct node *next[N];
    11 }tree[maxn];
    12 int t=0;
    13 struct node *creat()
    14 {
    15     int i;
    16     struct node *p;
    17     p=&tree[t++];
    18     p->flag=0;
    19     for(i=0;i<N;i++)
    20     {
    21         p->next[i]=NULL;
    22     }
    23     return p;
    24 }
    25 void insert(struct node **root,char *s)
    26 {
    27     int i,k;
    28     struct node *p;
    29     if(!(p=*root))
    30     {
    31         p=*root=creat();
    32     }
    33     i=0;
    34     while(s[i])
    35     {
    36         k=s[i++]-'a';
    37   if(p->next[k]==0)
    38             p->next[k]=creat();
    39         p=p->next[k];
    40     }
    41     p->flag=1;
    42 }
    43 int search(struct node **root,char *s)
    44 {
    45     int i=0,k;
    46     struct node *p;
    47     if(!(p=*root))
    48     {
    49         return 0;
    50     }
    51     while(s[i])
    52     {
    53         k=s[i++]-'a';
    54         if(!(p->next[k]))
    55             return 0;
    56         p=p->next[k];
    57     }
    58     return p->flag;
    59 }
    60 int main()
    61 {
    62     char s1[101],s2[101],s3[101];
    63     int l,i,j,k,c=0;
    64     struct node *root=NULL;
    65     while(~scanf("%s",s[c]))
    66     {
    67         insert(&root,s[c]);  
    68         c++;
    69   if(c==6)
    70    break;
    71     }
    72     for(i=0;i<c;i++)
    73     {
    74         memset(s1,0,sizeof(s1));
    75         l=strlen(s[i]);
    76         for(j=0;j<l;j++)
    77         {
    78             s1[j]=s[i][j];
    79             if(search(&root,s1))
    80             {
    81                 memset(s2,0,sizeof(s2));
    82                 for(k=j+1;k<l;k++)
    83                     s2[k-j-1]=s[i][k];
    84                 if(search(&root,s2))
    85                 {
    86                     puts(s[i]);
    87                     break;
    88                 }
    89             }
    90         }
    91     }
    92     return 0;
    93 }
  • 相关阅读:
    随感
    createDocumentFragment() 创建文档碎片节点
    关于数组的map、reduce、filter
    CSS中的常用属性
    精通CSS version2笔记2.小知识
    精通CSS version2笔记之⒈选择器
    Spring入门_01
    Spring入门
    Java 流程控制
    Java 数据类型
  • 原文地址:https://www.cnblogs.com/timeship/p/2640782.html
Copyright © 2011-2022 走看看