• Phone Number(字典树)


    【Description
    Description】
    We know that if a phone number A is another phone number B’s prefix, B is not able to
    be called. For an example, A is 123 while B is 12345, after pressing 123, we call A, and not
    able to call B.
    Given N phone numbers, your task is to find whether there exits two numbers A and B
    that A is B’s prefix.
    Input
    【Input
    Input】
    The input consists of several test cases.
    The first line of input in each test case contains one integer N (0<N<1001), represent the
    number of phone numbers.
    The next line contains N integers, describing the phone numbers.
    The last case is followed by a line containing one zero.
    Output
    【Output
    Output】
    For each test case, if there exits a phone number that cannot be called, print “NO”,
    otherwise print “YES” instead.
    Sample Input】
    【Sample Input
    2
    012
    012345
    2
    12
    012345
    0
    Sample Output】
    【Sample Output
    NO
    YES

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 struct node
     4 {
     5     int flag;
     6     struct node *next[10];
     7 }*root;
     8 int tag;
     9 struct node *creat()
    10 {
    11     struct node *p;
    12     p=(struct node *)malloc(sizeof(struct node));
    13     p->flag=0;
    14     for(int i=0;i<10;i++)
    15         p->next[i]=NULL;
    16      return p;
    17 }
    18 void inser(char *s)
    19 {
    20     int i;
    21     struct node *p;
    22     p=root;
    23     for(i=0;s[i]!='\0';i++)
    24     {
    25         if(!(p->next[s[i]-'0'])) p->next[s[i]-'0']=creat();
    26         p=p->next[s[i]-'0'];
    27         if(p->flag==1) tag=1;判断p节点是否是某字符串的结束。
    28     }
    29     p->flag=1;
    30 }
    31 int main ()
    32 {
    33     int t;
    34     char s[1010];
    35     while(~scanf("%d",&t))
    36     {
    37         if(!t) break;
    38         root=creat();
    39         tag=0;
    40         while(t--)
    41         {
    42             scanf("%s",s);
    43             inser(s);
    44         }
    45         if(tag==1)
    46                 printf("NO\n");
    47         else printf("YES\n");
    48     }
    49     return 0;
    50 }
  • 相关阅读:
    博弈论《《转》》
    HDU 2509 Be the Winner
    SORT排序。。
    HDU 356 SNim
    博弈
    KM算法。《转载》以后看。
    jmeter(28)逻辑控制器 之 交替控制器
    jmeter(30)逻辑控制器 之 Switch Controller 暂时不写!
    jmeter(29)逻辑控制器 之 吞吐量控制器
    Shell一个文件并等待完成
  • 原文地址:https://www.cnblogs.com/LK1994/p/3019029.html
Copyright © 2020-2023  润新知