nyoj 163 Phone List(动态字典树<trie>) poj Phone List (静态字典树<trie>)
Phone List
- 描述
-
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>)的更多相关文章
- NYOJ 163 Phone List (字符串处理 字典树)
题目链接 描述 Given a list of phone numbers, determine if it is consistent in the sense that no number is ...
- poj 1056 IMMEDIATE DECODABILITY 字典树
题目链接:http://poj.org/problem?id=1056 思路: 字典树的简单应用,就是判断当前所有的单词中有木有一个是另一个的前缀,直接套用模板再在Tire定义中加一个bool类型的变 ...
- POJ 1816 - Wild Words - [字典树+DFS]
题目链接: http://poj.org/problem?id=1816 http://bailian.openjudge.cn/practice/1816?lang=en_US Time Limit ...
- WPF 资源(StaticResource 静态资源、DynamicResource 动态资源、添加二进制资源、绑定资源树)
原文:WPF 资源(StaticResource 静态资源.DynamicResource 动态资源.添加二进制资源.绑定资源树) 一.WPF对象级(Window对象)资源的定义与查找 实例一: St ...
- POJ 2001 Shortest Prefixes(字典树)
题目地址:POJ 2001 考察的字典树,利用的是建树时将每个点仅仅要走过就累加.最后从根节点開始遍历,当遍历到仅仅有1次走过的时候,就说明这个地方是最短的独立前缀.然后记录下长度,输出就可以. 代码 ...
- [BinaryTree] AVL树、红黑树、B/B+树和Trie树的比较
转自:AVL树.红黑树.B/B+树和Trie树的比较 AVL树 最早的平衡二叉树之一.AVL是一种高度平衡的二叉树,所以通常的结果是,维护这种高度平衡所付出的代价比从中获得的效率收益还大,故而实际的应 ...
- [BZOJ 3295] [luogu 3157] [CQOI2011]动态逆序对(树状数组套权值线段树)
[BZOJ 3295] [luogu 3157] [CQOI2011] 动态逆序对 (树状数组套权值线段树) 题面 给出一个长度为n的排列,每次操作删除一个数,求每次操作前排列逆序对的个数 分析 每次 ...
- poj 2001 Shortest Prefixes(字典树)
题目链接:http://poj.org/problem?id=2001 思路分析: 在Trie结点中添加数据域childNum,表示以该字符串为前缀的字符数目: 在创建结点时,路径上的所有除叶子节点以 ...
- 【树状数组套权值线段树】bzoj1901 Zju2112 Dynamic Rankings
谁再管这玩意叫树状数组套主席树我跟谁急 明明就是树状数组的每个结点维护一棵动态开结点的权值线段树而已 好吧,其实只有一个指针,指向该结点的权值线段树的当前结点 每次查询之前,要让指针指向根结点 不同结 ...
随机推荐
- Ubuntu 终端中文回显乱码
参考文章 : http://wiki.ubuntu.org.cn/%E4%BF%AE%E6%94%B9locale 所用 Ubuntu的版本 : 猜想是这样的: 1.字符的编码和显示时,所处的环境不是 ...
- 浅谈Mysql索引
文章原创于公众号:程序猿周先森.本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号. 我们都知道,数据库索引可以帮助我们更加快速的找出符合的数据,但是如果不使用索引,Mysql则会从第一条开始查询 ...
- 概念理解:boost::asio::io_service
IO模型 io_service对象是asio框架中的调度器,所有异步io事件都是通过它来分发处理的(io对象的构造函数中都需要传入一个io_service对象). asio::io_service i ...
- 百万年薪python之路 -- 前端CSS基础介绍
一. CSS介绍 CSS定义 CSS(Cascading Style Sheet,层叠样式表)定义如何显示HTML元素,给HTML设置样式,让它更加美观. 语法结构 div{ color: green ...
- LaTeX常用篇(一)---公式输入
目录 1. 序言 2. 命令介绍 3. 公式输入 3.1 无编号公式 3.2 有编号公式 更新时间:2019.10.02 1. 序言 当我们首次在文档中输入公式的时候,我们首先想到的是word,毕 ...
- Java基础(十一)回调(callback)与对象克隆(Cloneable)
一.回调 1.回调是一种常见的程序设计模式,可以指出某个特定时间发生时应该采取的动作. 在java.swing包中有一个类Timer类,可以使用它在到达指定的时间间隔作出什么动作.那么就有两个问题,即 ...
- TensorFlow初学教程(完整版)
1:你想要学习TensorFlow,首先你得安装Tensorflow,在你学习的时候你最好懂以下的知识: a:怎么用python编程: b:了解一些关于数组的知识: c:最理想的 ...
- .NET Core 3.0 中间件 Middleware
中间件官网文档解释:中间件是一种装配到应用管道以处理请求和响应的软件 每个中间件: 选择是否将请求传递到管道中的下一个组件. 可在管道中的下一个组件前后执行工作. 使用 IApplicationBui ...
- linux安装redis及外网访问
1.下载Redis,最新版是redis-3.2.1.tar.gz 2.上传到Linux上,解压到/usr/local/下面 ,命令:tar -zxvf redis-3.2.1.tar.gz 3.我们 ...
- [springboot 开发单体web shop] 3. 用户注册实现
目录 用户注册 ## 创建数据库 ## 生成UserMapper ## 编写业务逻辑 ## 编写user service UserServiceImpl#findUserByUserName 说明 U ...