电话号码
查看 提交 统计 提问
总时间限制: 1000ms 内存限制: 65536kB

描写叙述

给你一些电话号码,请推断它们是否是一致的,即是否有某个电话是还有一个电话的前缀。

比方:





Emergency 911

Alice 97 625 999

Bob 91 12 54 26





在这个样例中。我们不可能拨通Bob的电话,由于Emergency的电话是它的前缀,当拨打Bob的电





话时会先接通Emergency,所以这些电话号码不是一致的。





输入

第一行是一个整数t,1 ≤ t ≤ 40,表示測试数据的数目。

每一个測试例子的第一行是一个整数n。1 ≤ n ≤ 10000,其后n行每行是一个不超过10位的电话号码。

输出

对于每一个測试数据,假设是一致的输出“YES”,假设不是输出“NO”。

例子输入

2

3

911

97625999

91125426

5

113

12340

123440

12345

98346

例子输出

NO

YES

简单trie树。注意两种情况:先插入短串再插入长串和先插入长串再插入短串。

#include <stdio.h>
#include <string.h>
#include <stdlib.h> struct Node{
struct Node *next[10];
int isCover, isEnd;
};
int ok; void clean(Node *p)
{
memset(p->next, 0, sizeof(p->next));
p->isCover = p->isEnd = 0;
} void insert(char *str, Node *root)
{
Node *p = root;
int id;
while(*str){
id = *str - '0';
if(p->next[id] == NULL){
p->next[id] = (Node *)malloc(sizeof(Node));
clean(p->next[id]);
}
p = p->next[id];
if(p->isEnd) ok = 0;
++p->isCover;
++str;
}
if(p->isCover > 1) ok = 0;
p->isEnd = 1;
} void DELETE(Node *p)
{
for(int i = 0; i < 10; ++i)
if(p->next[i]) DELETE(p->next[i]);
free(p);
} int main()
{
int t, n;
char str[12];
scanf("%d", &t);
while(t--){
Node *root = (Node *)malloc(sizeof(Node));
scanf("%d", &n);
clean(root); ok = 1;
while(n--){
scanf("%s", str);
if(ok) insert(str, root);
}
printf(ok ? "YES\n" : "NO\n");
DELETE(root);
}
return 0;
}

电话号码 【trie树】的更多相关文章

  1. [POJ] #1002# 487-3279 : 桶排序/字典树(Trie树)/快速排序

    一. 题目 487-3279 Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 274040   Accepted: 48891 ...

  2. HDU1671 - Phone List(Trie树)

    题目大意 给定一些电话号码,判断是否有电话号码是其他电话号码的前缀 题解 裸Trie树嘛~~~~只需要一个插入过程即可,假设X是Y的前缀,在插入的过程中有两种情况,X在Y之前插入,那么在插入Y的时候经 ...

  3. poj_3630 trie树

    题目大意 给定一系列电话号码,查看他们之间是否有i,j满足,号码i是号码j的前缀子串. 题目分析 典型的trie树结构.直接使用trie树即可.但是需要注意,若使用指针形式的trie树,则在大数据量下 ...

  4. poj3630 Phone List【Trie树】

    Phone List Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 34805   Accepted: 9980 Descr ...

  5. POJ 3630 trie树

    Phone List Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 26559 Accepted: 8000 Descripti ...

  6. 基于trie树做一个ac自动机

    基于trie树做一个ac自动机 #!/usr/bin/python # -*- coding: utf-8 -*- class Node: def __init__(self): self.value ...

  7. 基于trie树的具有联想功能的文本编辑器

    之前的软件设计与开发实践课程中,自己构思的大作业题目.做的具有核心功能,但是还欠缺边边角角的小功能和持久化数据结构,先放出来,有机会一点点改.github:https://github.com/chu ...

  8. hihocoder-1014 Trie树

    hihocoder 1014 : Trie树 link: https://hihocoder.com/problemset/problem/1014 题意: 实现Trie树,实现对单词的快速统计. # ...

  9. 洛谷P2412 查单词 [trie树 RMQ]

    题目背景 滚粗了的HansBug在收拾旧英语书,然而他发现了什么奇妙的东西. 题目描述 udp2.T3如果遇到相同的字符串,输出后面的 蒟蒻HansBug在一本英语书里面找到了一个单词表,包含N个单词 ...

随机推荐

  1. LayoutInflater的用法

    Instantiates a layout XML file into its corresponding View objects. It is never used directly. Inste ...

  2. MongoDB学习-->命令行增删改查&JAVA驱动操作Mongodb

    MongoDB 是一个基于分布式文件存储的数据库. 由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关 ...

  3. Linux中 find 常见用法示例

    Linux中find常见用法示例 #find path -option [ -print ] [ -exec -ok command ] {} \; #-print 将查找到的文件输出到标准输出 #- ...

  4. GloVe词分布式表示

    GloVe 模型介绍 下面的内容主要来自https://blog.csdn.net/u014665013/article/details/79642083 GloVe的推导 GloVe是基于共现信息来 ...

  5. A Few Laughing Men

    A Few Laughing Men CodeChef - LAUGHMEN Balaji is a great person to hang out with. He tells really am ...

  6. 用CSV库一行行插入数据

    语料团队之前都是手动标注文字的定位位置,今天写了个小脚本,帮他们批量生成文字对应的定位. 其中数据生成后,要生成csv文件,查看了下使用csv库. import csv row1 = [1,2,3,4 ...

  7. WebApplicationContextUtils源码

    package org.springframework.web.context.support; import javax.servlet.ServletContext; import javax.s ...

  8. HDU1877 又一版 A+B

    Problem Description 输入两个不超过整型定义的非负10进制整数A和B(<=231-1),输出A+B的m (1 < m <10)进制数.   Input 输入格式:测 ...

  9. [LOJ#6002]「网络流 24 题」最小路径覆盖

    [LOJ#6002]「网络流 24 题」最小路径覆盖 试题描述 给定有向图 G=(V,E).设 P 是 G 的一个简单路(顶点不相交)的集合.如果 V 中每个顶点恰好在 P 的一条路上,则称 P 是  ...

  10. BZOJ 2806 [Ctsc2012]Cheat ——后缀自动机 单调队列优化DP

    先建出广义后缀自动机. 然后跑出文章中每一个位置的最大匹配距离. 然后定义$f[i]$表示匹配到以$i$结尾的串时,最长的匹配距离. 显然可以二分$L$的取值. 然后容易得到$DP$方程 $f[i]= ...