Phone List

时间限制:1000 ms  |  内存限制:65535 KB
难度:4
 
描述

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
 /**
题目大意(nyoj 163):
判断一个字符串是否是其他字符串的前缀字符串 算法:动态(链表)字典树 步骤:
Ⅰ、用struct建立字典树的模型(并在其内部构建初始化函数)
Ⅱ、建立my_insert方法实现将数据的插入(并在插入的时候判断是否满足题意) **/

基础模板代码(node、my_insert):

 struct node
{
node *next[];
int cnt;
node ()
{
cnt = ;
memset (next, , sizeof (next));
}
} node *root = new node(); void my_insert (char *s)
{
node *p = new node();
int i, k, len = strlen (s);
for (i = ; i < len; ++ i)
{
k = s[i] - '';
if (p->next [k] == NULL)
p->next [k] = new node();
p = p->next [k];
}
p->cnt = ;
return ;
}

nyoj 163 (AC) C\C++代码实现:

 #include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring> using namespace std; int T, n, flag, mark; char temp[]; struct node
{
node *next[];
int cnt;
node ()
{
cnt = ;
memset(next, , sizeof(next));
}
}; node *root; void my_insert (char *s)
{
node *p = root;
mark = ;
int i, k, len = strlen(s);
for (i = ; i < len; ++ i)
{
k = s[i] - '';
if (p->next[k] == NULL)
{
mark = ;
p->next[k] = new node();
}
p = p->next[k];
if (p->cnt)
{
flag = ;
return ;
}
}
if (!mark)
{
flag = ;
return ;
}
p->cnt = ;
return ;
} int main()
{
scanf("%d", &T);
while(T --)
{
flag = ;
root = new node();
scanf("%d", &n);
while(n --)
{
gets(temp);
if (!flag) continue;
my_insert (temp);
}
if (!flag)
printf("NO\n");
else
printf("YES\n");
}
return ;
}

下面是poj 3630 的算法:

 /**
题目大意(poj 3630):
判断一个字符串是否是其他字符串的前缀字符串
是 ==> return NO
(if all)否 ==> return YES 算法:静态字典树 步骤:
Ⅰ、用struct建立字典树模型(并在其内部构建初始化函数)
Ⅱ、建立my_insert方法实现数据的插入(并判断是否满足条件)
**/

基本模型:

 int pos;

 struct node
{
node *next[];
int cnt;
node()
{
cnt = ;
memset(next, , sizeof(next));
}
}; node *root;
pos = ; void my_insert (node *root, char *s)
{
node *p = root;
int i, k, len = strlen (s);
for (i = ; i < len; ++ i)
{
k = s[i] - '';
if (p->next [k] == )
{
p->next [k] = root + pos;
pos ++;
}
p = p->next [k];
}
p->cnt = ;
return ;
} my_insert(root + , temp);

poj 3630 (C\C++代码实现 <AC>):

PS:调试用的 node root[10000]。

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <cstring> using namespace std; int n, flag, mark, pos; char temp[]; struct node
{
node *next[];
int cnt;
node()
{
cnt = ;
memset(next, , sizeof(next));
}
}; void my_insert (node *root, char *s)
{
mark = ;
node *p = root;
int i, k ,len = strlen(s);
for (i = ; i < len; ++ i)
{
k = s[i] - '';
if (p->next[k] == )
{
mark = ;
p->next[k] = root + pos;
++ pos;
}
p = p->next[k];
if (p->cnt)
{
flag = ;
return;
}
}
if (!mark)
{
flag = ;
return ;
} p->cnt = ;
return ;
} int main () {
int N;
scanf ("%d", &N);
while (N --) {
flag = ;
node root[];
pos = ;
scanf("%d", &n);
while (n --)
{
scanf("%s", &temp[]);
if (flag) continue;
my_insert (root + , temp);
}
if (flag)
printf("NO\n");
else
printf("YES\n");
}
return ;
}

nyoj 163 Phone List(动态字典树<trie>) poj Phone List (静态字典树<trie>)的更多相关文章

  1. NYOJ 163 Phone List (字符串处理 字典树)

    题目链接 描述 Given a list of phone numbers, determine if it is consistent in the sense that no number is ...

  2. poj 1056 IMMEDIATE DECODABILITY 字典树

    题目链接:http://poj.org/problem?id=1056 思路: 字典树的简单应用,就是判断当前所有的单词中有木有一个是另一个的前缀,直接套用模板再在Tire定义中加一个bool类型的变 ...

  3. POJ 1816 - Wild Words - [字典树+DFS]

    题目链接: http://poj.org/problem?id=1816 http://bailian.openjudge.cn/practice/1816?lang=en_US Time Limit ...

  4. WPF 资源(StaticResource 静态资源、DynamicResource 动态资源、添加二进制资源、绑定资源树)

    原文:WPF 资源(StaticResource 静态资源.DynamicResource 动态资源.添加二进制资源.绑定资源树) 一.WPF对象级(Window对象)资源的定义与查找 实例一: St ...

  5. POJ 2001 Shortest Prefixes(字典树)

    题目地址:POJ 2001 考察的字典树,利用的是建树时将每个点仅仅要走过就累加.最后从根节点開始遍历,当遍历到仅仅有1次走过的时候,就说明这个地方是最短的独立前缀.然后记录下长度,输出就可以. 代码 ...

  6. [BinaryTree] AVL树、红黑树、B/B+树和Trie树的比较

    转自:AVL树.红黑树.B/B+树和Trie树的比较 AVL树 最早的平衡二叉树之一.AVL是一种高度平衡的二叉树,所以通常的结果是,维护这种高度平衡所付出的代价比从中获得的效率收益还大,故而实际的应 ...

  7. [BZOJ 3295] [luogu 3157] [CQOI2011]动态逆序对(树状数组套权值线段树)

    [BZOJ 3295] [luogu 3157] [CQOI2011] 动态逆序对 (树状数组套权值线段树) 题面 给出一个长度为n的排列,每次操作删除一个数,求每次操作前排列逆序对的个数 分析 每次 ...

  8. poj 2001 Shortest Prefixes(字典树)

    题目链接:http://poj.org/problem?id=2001 思路分析: 在Trie结点中添加数据域childNum,表示以该字符串为前缀的字符数目: 在创建结点时,路径上的所有除叶子节点以 ...

  9. 【树状数组套权值线段树】bzoj1901 Zju2112 Dynamic Rankings

    谁再管这玩意叫树状数组套主席树我跟谁急 明明就是树状数组的每个结点维护一棵动态开结点的权值线段树而已 好吧,其实只有一个指针,指向该结点的权值线段树的当前结点 每次查询之前,要让指针指向根结点 不同结 ...

随机推荐

  1. PMBOK(第六版) PMP笔记——《十》第十章(项目沟通管理)

    PMBOK(第六版) PMP笔记——<十>第十章(项目沟通管理) 第十章 项目沟通管理: PM 大多数时间都用在与干系人的沟通上. 第十章有三个过程: 规划沟通管理:根据干系人的需求,制定 ...

  2. [JZOJ100026]【NOIP2017提高A组模拟7.7】图

    Description 有一个n个点n条边的有向图,每条边为<i,f(i),w(i)>,意思是i指向f(i)的边权为w(i)的边,现在小A想知道,对于每个点的si和mi. si:由i出发经 ...

  3. JVM 中发生内存溢出的 8 种原因及解决办法

    1. Java 堆空间 2. GC 开销超过限制 3. 请求的数组大小超过虚拟机限制 4. Perm gen 空间 5. Metaspace 6. 无法新建本机线程 7. 杀死进程或子进程 8. 发生 ...

  4. opencv实践::对象计数

    问题描述 真实案例,农业领域经常需要计算对象个数 或者在其它领域拍照自动计数,可以提供效率,减低成本 解决思路 通过二值分割+形态学处理+距离变换+连通区域计算 #include <opencv ...

  5. 常用函数-Time

    #pragma pack(push,1) /* 在这中间定义的结构体,已单字节对齐 */ #pragma pack(pop) /************************************ ...

  6. 【RabbitMQ 实战指南】一 RabbitMQ入门

    1.消息中间件 1.1.什么是消息中间件 消息中间件(Message Queue Middleware,简称 MQ)是指利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通道来进行分布式系 ...

  7. xpath相关用法及技巧

    本节讲解网页解析神器----XPath lxml下载 xpath基本用法 xpath插件 Xpath及XML路径语言,它是一门在XML文档查找信息的语言. 一:lxml下载以及安装 首先需要解决lxm ...

  8. Go中http超时问题的排查

    背景 排查 推测 连接超时 疑问 http2 解决超时 并发连接数 服务端限制 真相 重试 解决办法 问题1 背景 最新有同事反馈,服务间有调用超时的现象,在业务高峰期发生的概率和次数比较高.从日志中 ...

  9. lnmp安装mysql

    lnmp安装mysql 下载lnmp wget http://soft.vpser.net/lnmp/lnmp1.6.tar.gz 解压 tar ‐xf lnmp1..tar.gz 安装数据库 ./i ...

  10. 百度地图Javascript API 调用示例

    调用示例 !<!DOCTYPE html> <html> <head> <title>百度地图DEMO</title> </head& ...