zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    Jsp语法、指令及动作元素
    java之Cookie详解
    servlet请求转发、包含以及重定向
    20181114_特性
    20181114_反射_泛型反射
    20181112_反射基础_对象获取
    20181110_wait和async
    20181106_线程之异常_取消_变量_安全Lock
    20181105_线程之Task
    20181104_C#线程之Thread_ThreadPool_使用Thread实现回到和带参数的回调
  • 原文地址:https://www.cnblogs.com/LK1994/p/3019029.html
Copyright © 2011-2022 走看看