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. Unix 线程改变创建进程中变量的值(2)

    执行环境:Linux ubuntu 4.4.0-31-generic #50-Ubuntu SMP Wed Jul 13 00:07:12 UTC 2016 x86_64 x86_64 x86_64 ...

  2. 【阿里云IoT+YF3300】6.物联网设备报警配置

    纵然5G时代已经在时代的浪潮中展现出了它的身影,但是就目前的物联网环境中,网络问题仍旧是一个比较突出的硬伤.众所周知,在当前的物联网规划中,与其说是实现万物互联,倒不如说是行业指标数据监控.对于一些特 ...

  3. 如何在CentOS6.4系统上安装KVM虚拟机

    CentOS6.4系统上安装KVM虚拟机   备注:以下操作说明是经过实验验证后总结出来的笔录,有需要的朋友可以进行参考,以下是基于VMware12.5.2虚拟机版本上安装的实验环境. 一.安装KVM ...

  4. ThreadLocal小试牛刀

    ThreadLocal中保存的数据只能被当前线程私有,不被其它线程可见 证明 声明一个全局的变量threadLocal,初始值为1,通过3个线程对其进行访问修改设置,理论上threadLocal的最终 ...

  5. ApplicationContextAware使用理解

    接口的作用 当一个类实现了这个接口(ApplicationContextAware)之后,Aware接口的Bean在被初始之后,可以取得一些相对应的资源,这个类可以直接获取spring 配置文件中 所 ...

  6. docker 概念简介、简单入门

    1.docker 简介 Docker 是一个开源项目,这个项目旨在通过把应用程序打包为可移植的.自给自足的容器(引用语) DocKer一次构建可放在任何地方就可以运行,不需要进行任何改变DocKer  ...

  7. tcp通信客户端本地日志查看

    最近有一个需求,app要接sdk,只涉及到客户端tcp通信,不涉及服务端接口调用.本文主要从adb环境准备.android/ios本地日志查看实战,进行分析整理. 一.adb查看Android本地日志 ...

  8. 解决SAP740 GUI 搜索帮助(F4)回填值乱码的问题

    SAP 740客户端引入了搜索帮助增强功能,并且默认是开启该功能的,在带有F4搜索帮助的字段输入框中输入字段的前两个字符,可以自动以下拉框的方式带出包含包含所输入字符的条目,从而实现快速的输入帮助,如 ...

  9. Zabbix 四 主动模式

    本次的主机192.168.131.8 被动模式. 将zabbix4.4.4的源码包放过去,解压安装依赖准备编译安装,并创建zabbix账户. tar -xf zabbix-4.4.0.tar.gz & ...

  10. Zabbix_agent 三 被动模式的配置

    zabbix一共有三种监控模式分别默认是被动模式,由agent端收集数据,server去请求然后获取agent的数据. 还有就是主动模式,由agent收集数据并定时发送到server端,则就是被动模式 ...