• sdutoj 2151 Phone Number


    http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2151

    Phone Number

     

    Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^

    题目描述

    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.
     

    输入

     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.

    输出

     For each test case, if there exits a phone number that cannot be called, print “NO”, otherwise print “YES” instead.

    示例输入

    2
    012
    012345
    2
    12
    012345
    0

    示例输出

    NO
    YES

    提示

     

    来源

     2010年山东省第一届ACM大学生程序设计竞赛

    示例程序

    AC代码:

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<cstdlib>
     5 using namespace std;
     6 
     7 struct node
     8 {
     9     int count;
    10     node *child[10];
    11     node()
    12     {
    13         count=0;
    14         int i;
    15         for(i=0; i<10; i++)
    16             child[i]=0;
    17     }
    18 };
    19 
    20 node *current, *newnode;
    21 
    22 void insert(node *root, char *ss)
    23 {
    24     //printf("%s*****
    ",ss);
    25     int i, m;
    26     current=root;
    27     for(i=0; i<strlen(ss); i++)
    28     {
    29         m=ss[i]-'0';
    30         if(current->child[m]!=NULL)
    31         {
    32             current=current->child[m];
    33             ++(current->count);
    34         }
    35         else
    36         {
    37             newnode=new node;
    38             ++(newnode->count);
    39             current->child[m]=newnode;
    40             current=newnode;
    41         }
    42     }
    43 }
    44 
    45 int search(node *root, char *ss)
    46 {
    47     //printf("%s*****
    ",ss);
    48     int i, m;
    49     current=root;
    50     for(i=0; i<strlen(ss); i++)
    51     {
    52         m=ss[i]-'0';
    53         if(current->child[m]==NULL)
    54             return 0;
    55         current=current->child[m];
    56     }
    57     return current->count;
    58 }
    59 
    60 int main()
    61 {
    62     char str[30], s[1010][30];
    63     int t, flag, i;
    64     while(scanf("%d",&t))
    65     {
    66         if(t==0) break;
    67         flag=0;
    68         node *root=new node;
    69         for(i=0; i<t; i++)
    70         {
    71             scanf("%s",str);
    72             strcpy(s[i], str);
    73             //puts(s[i]);
    74             insert(root, str);
    75         }
    76         for(i=0; i<t; i++)
    77         {
    78             if(search(root, s[i])-1)
    79             {
    80                 flag=1;
    81                 break;
    82             }
    83         }
    84         if(flag==0) printf("YES
    ");
    85         else printf("NO
    ");
    86     }
    87     return 0;
    88 }
    View Code
  • 相关阅读:
    MySQL
    权限(二)
    权限(一)
    化栈为队
    栈的最小值
    实现简易版react中createElement和render方法
    12.整数转罗马数字
    call,apply,bind的理解
    8. 字符串转换整数 (atoi)
    172.阶乘后的0
  • 原文地址:https://www.cnblogs.com/jeff-wgc/p/4468359.html
Copyright © 2020-2023  润新知