XYOJ 1905: Phone List

8人阅读 评论(0) 收藏 举报
分类:

 Phone List

时间限制: 1 Sec  内存限制: 64 MB

题目描述

Given a list of phone numbers, determine if it is consistent in the sense that no number is the prefix of another. Let's say the phone catalogue listed these numbers:

  • Emergency 911
  • Alice 97 625 999
  • Bob 91 12 54 26

In this case, it's not possible to call Bob, because the central would direct your call to the emergency line as soon as you had dialled the first three digits of Bob's phone number. So this list would not be consistent.

输入

The first line of input gives a single integer, 1 ≤ t ≤ 10, the number of test cases. Each test case starts with n, the number of phone numbers, on a separate line, 1 ≤ n ≤ 100000. Then follows n lines with one unique phone number on each line. A phone number is a sequence of at most ten digits.

输出

For each test case, output "YES" if the list is consistent, or "NO" otherwise.

样例输入

2
3
911
97625999
91125426
5
113
12340
123440
12345
98346

样例输出

NO
YES

解题思路:典型的字典树(容易超内存)

代码如下:

# include<stdio.h>
# include<string.h>
# include<algorithm>
using namespace std;
struct node{
    node * next[10];
    node(){
        memset(next,0,sizeof(next));
    }
}; 
int flag;
struct nod{
    char s[10];
    int len ;
}a[100005];
bool cmp(nod a,nod b)
{
    return a.len>b.len;
}
void insert(char *s,node * & root)        //插入
{  flag=0;       //用来标记是否有重复的
    node *p=root;
    int i,k;
    for(i=0;s[i];i++)
    {
        k=s[i]-'0';
        if(p->next[k]==NULL)
        {
            p->next[k]=new node();
            flag=1;
        }
        p=p->next[k];
    }
}
int main(){
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int n;
        node *root=new node();
        scanf("%d",&n);
        flag=1;
        for(int i=0;i<n;i++)
        {
            scanf("%s",a[i].s);
            a[i].len=strlen(a[i].s);
        }
        sort(a,a+n,cmp);   //将长度排序
        for(int i=0;i<n;i++)
        {
            if(flag)
            insert(a[i].s,root);
            else break;
        }       
        if(flag) printf("YES\n");
        else printf("NO\n");
         
    }
     
    return 0;
}


查看评论

Phone List(简单的字典树插入操作)

Phone List Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total...
  • ZSGG_ACM
  • ZSGG_ACM
  • 2015-02-15 19:50:04
  • 1118

A(1886): Phone List

Description   Given a list of phone numbers, determine if it is consistent in the sense that no num...
  • Nowara_Shinnosuke
  • Nowara_Shinnosuke
  • 2017-05-01 11:01:43
  • 535

hdu Phone List 字典树的前缀判断

题意:给出n串字符串,问其中是否会有某串字符串是另一个字符串的前缀。 做法:不断加到Trie里,然后不断判断是不是其他字符串的前缀,或者已有的是不是自己的前缀。...
  • u013532224
  • u013532224
  • 2015-07-06 18:33:51
  • 721

Phone List(字典树)

Phone List Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota...
  • a997930294
  • a997930294
  • 2014-08-10 16:32:36
  • 972

XYOJ 多数求最大值

题目描述 输入10个整数,输出其中最大的数。 输入 输入包含10行,每一行一个整数。 输出 请输出读入的10个数中的最大值。请注意行尾输出换行。 样例输入 10 6 19 35 50 107 10 -...
  • Yoga521
  • Yoga521
  • 2017-07-24 13:04:14
  • 165

[ACM] hdu 1671 Phone List (字典树)

Phone List Problem Description Given a list of phone numbers, determine if it is consisten...
  • sr19930829
  • sr19930829
  • 2014-05-25 20:51:32
  • 1765

POJ1905-Expanding Rods

转载请注明出处:優YoU http://user.qzone.qq.com/289065406/blog/1301845324   大致题意: 一根两端固定在两面墙上的杆 受热弯曲后变弯曲 ...
  • lyy289065406
  • lyy289065406
  • 2011-07-31 16:43:20
  • 3839

安装MindManager出现错误1905怎么解决

关于在安装MindManager过程中提示错误1905,本文小编将为大家做一下讲解。事实上,此错误是Windows安装错误,并不是来自MindManager本身。建议采取以下给出的方法尝试安装Mind...
  • siweidaotu
  • siweidaotu
  • 2017-02-16 09:47:53
  • 582

[Leetcode] Valid Phone Numbers的笔记

Valid Phone Numbers题目如下,大体就是给的电话号码的格式只符合(xxx) xxx-xxxx or xxx-xxx-xxxx. (x为数字)...
  • wanto4rom
  • wanto4rom
  • 2015-10-16 11:18:52
  • 777

1905 Problem B 二叉树

问题 B: 二叉树 时间限制: 1 Sec 内存限制: 32 MB 献花: 59 解决: 36 [献花][花圈][TK题库] 题目描述 如上所示,由正整数1,2,3……组成了一颗特...
  • fantasydreams
  • fantasydreams
  • 2018-02-20 10:09:34
  • 24
    个人资料
    持之以恒
    等级:
    访问量: 1万+
    积分: 1743
    排名: 2万+
    文章存档