电话号码 【trie树】
描写叙述
给你一些电话号码,请推断它们是否是一致的,即是否有某个电话是还有一个电话的前缀。
比方:
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树】的更多相关文章
- [POJ] #1002# 487-3279 : 桶排序/字典树(Trie树)/快速排序
一. 题目 487-3279 Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 274040 Accepted: 48891 ...
- HDU1671 - Phone List(Trie树)
题目大意 给定一些电话号码,判断是否有电话号码是其他电话号码的前缀 题解 裸Trie树嘛~~~~只需要一个插入过程即可,假设X是Y的前缀,在插入的过程中有两种情况,X在Y之前插入,那么在插入Y的时候经 ...
- poj_3630 trie树
题目大意 给定一系列电话号码,查看他们之间是否有i,j满足,号码i是号码j的前缀子串. 题目分析 典型的trie树结构.直接使用trie树即可.但是需要注意,若使用指针形式的trie树,则在大数据量下 ...
- poj3630 Phone List【Trie树】
Phone List Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 34805 Accepted: 9980 Descr ...
- POJ 3630 trie树
Phone List Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 26559 Accepted: 8000 Descripti ...
- 基于trie树做一个ac自动机
基于trie树做一个ac自动机 #!/usr/bin/python # -*- coding: utf-8 -*- class Node: def __init__(self): self.value ...
- 基于trie树的具有联想功能的文本编辑器
之前的软件设计与开发实践课程中,自己构思的大作业题目.做的具有核心功能,但是还欠缺边边角角的小功能和持久化数据结构,先放出来,有机会一点点改.github:https://github.com/chu ...
- hihocoder-1014 Trie树
hihocoder 1014 : Trie树 link: https://hihocoder.com/problemset/problem/1014 题意: 实现Trie树,实现对单词的快速统计. # ...
- 洛谷P2412 查单词 [trie树 RMQ]
题目背景 滚粗了的HansBug在收拾旧英语书,然而他发现了什么奇妙的东西. 题目描述 udp2.T3如果遇到相同的字符串,输出后面的 蒟蒻HansBug在一本英语书里面找到了一个单词表,包含N个单词 ...
随机推荐
- LayoutInflater的用法
Instantiates a layout XML file into its corresponding View objects. It is never used directly. Inste ...
- MongoDB学习-->命令行增删改查&JAVA驱动操作Mongodb
MongoDB 是一个基于分布式文件存储的数据库. 由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关 ...
- Linux中 find 常见用法示例
Linux中find常见用法示例 #find path -option [ -print ] [ -exec -ok command ] {} \; #-print 将查找到的文件输出到标准输出 #- ...
- GloVe词分布式表示
GloVe 模型介绍 下面的内容主要来自https://blog.csdn.net/u014665013/article/details/79642083 GloVe的推导 GloVe是基于共现信息来 ...
- A Few Laughing Men
A Few Laughing Men CodeChef - LAUGHMEN Balaji is a great person to hang out with. He tells really am ...
- 用CSV库一行行插入数据
语料团队之前都是手动标注文字的定位位置,今天写了个小脚本,帮他们批量生成文字对应的定位. 其中数据生成后,要生成csv文件,查看了下使用csv库. import csv row1 = [1,2,3,4 ...
- WebApplicationContextUtils源码
package org.springframework.web.context.support; import javax.servlet.ServletContext; import javax.s ...
- HDU1877 又一版 A+B
Problem Description 输入两个不超过整型定义的非负10进制整数A和B(<=231-1),输出A+B的m (1 < m <10)进制数. Input 输入格式:测 ...
- [LOJ#6002]「网络流 24 题」最小路径覆盖
[LOJ#6002]「网络流 24 题」最小路径覆盖 试题描述 给定有向图 G=(V,E).设 P 是 G 的一个简单路(顶点不相交)的集合.如果 V 中每个顶点恰好在 P 的一条路上,则称 P 是 ...
- BZOJ 2806 [Ctsc2012]Cheat ——后缀自动机 单调队列优化DP
先建出广义后缀自动机. 然后跑出文章中每一个位置的最大匹配距离. 然后定义$f[i]$表示匹配到以$i$结尾的串时,最长的匹配距离. 显然可以二分$L$的取值. 然后容易得到$DP$方程 $f[i]= ...