电话号码 【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个单词 ...
随机推荐
- Leetcode31--->Next Permutation(数字的下一个排列)
题目: 给定一个整数,存放在数组中,求出该整数的下一个排列(字典顺序):要求原地置换,且不能分配额外的内存 举例: 1,2,3 → 1,3,2: 3,2,1 → 1,2,3: 1,1,5 → 1, ...
- 第1章jquery选择器
一.jquery等价于$ jquery选择器继承了css选择器的风格. $("#ID")代替了document.getElementById()函数,即通过id获取元素. $(&q ...
- C++之Effective STL学习笔记Item7
假设我们现在有以下代码: void doSomething() { vector<Widget*> vwp; ; i < SOME_MAGIC_NUMBER; ++i) vwp.pu ...
- 标准C程序设计七---74
Linux应用 编程深入 语言编程 标准C程序设计七---经典C11程序设计 以下内容为阅读: <标准C程序设计>(第7版) 作者 ...
- 标准C程序设计七---71
Linux应用 编程深入 语言编程 标准C程序设计七---经典C11程序设计 以下内容为阅读: <标准C程序设计>(第7版) 作者 ...
- Larevel5.1 打印SQL语句
Larevel5.1 打印SQL语句 为了方便调试,开发时需要打印sql. 方法一(全局打开): SQL打印默认是关闭的, 需要在/vendor/illuminate/database/Connect ...
- html移动端 -- meta-模板 + rem
第一种方式: ps 不用除以2<header> <meta charset="utf-8"> <meta name="viewport&qu ...
- 根据ipnut的maxlength实时提示输入的字符长度
$(function(){ $("body").on("focus","input,textarea", function() { if(! ...
- cmd 命令提示符常用操作
切换盘符: d: 进入子目录: cd web 返回上级目录: cd .. 查询子目录下所有文件:dir
- 洛谷——P1767 家族_NOI导刊2010普及(10)
P1767 家族_NOI导刊2010普及(10) 题目描述 在一个与世隔绝的岛屿上,有一个有趣的现象:同一个家族的人家总是相邻的(这里的相邻是指东南西北四个方向),不同的家族之间总会有河流或是山丘隔绝 ...