POJ3630-Phone List-Trie字典树模板题
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.
Input
The first line of input gives a single integer, 1 ≤ t ≤ 40, the number of test cases. Each test case starts with n, the number of phone numbers, on a separate line, 1 ≤ n ≤ 10000. Then follows n lines with one unique phone number on each line. A phone number is a sequence of at most ten digits.
Output
For each test case, output "YES" if the list is consistent, or "NO" otherwise.
Sample Input
2
3
911
97625999
91125426
5
113
12340
123440
12345
98346
Sample Output
NO
YES 题意:
对于每一组数据里面的每行字符串,如果存在某一个串是另外一个串的前缀关系的话,输入NO,不存在的话输出YES。
注意审题。 注意:
该题没有给出数据范围,数组开到1e4+20会错,开到1e5+20即可。 详情看代码注释。也可以考虑用链表指针来写。
#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;
const int N=1e5+; int ch[N][],len;//15是开的字符集大小(该题目给的是0-9),该数组用于存储trie树
bool book[N];//==1表示从根节点到该点,所经过的边上字母组成的字符串是实际字符串集合中的元素
char a[];//题目给出的是n个长度不超过10的字符串
int tot;//总节点数 //对一个字符集为数字的trie树插入一个字符串s
bool insertt(char *s) //传入一个字符数组
{
// int len=strlen(s);
int u=,flag=;
for(int i=; i<len; i++)
{
int c=s[i]-'';
if(ch[u][c]==)//表示不存在这条边,所以需要新建一个节点和一条新的边
{
tot++;
ch[u][c]=tot;//tot为总结点数,新建了一个节点
}
else //else if(ch[u][c]!=0)
{
if(i==len-)//如果遍历到最后一个节点并且没有插入任何一个新节点
flag=;//就说明存在前缀关系,返回flag=1
}//else if(i==len-1)
u=ch[u][c];
if(book[u]==)//经过了某一个有过标记的节点
flag=;
}
book[u]=;//一个节点连着接下去的一条边,而不是上一条边
//bo给的赋值为真,给的是最后一个字母所连着的的一个节点
//三个字母是有四个节点
//给当前字符串的最后一个字母进行标记,代表字符串结尾标志
return flag;
} int main()
{
int t,n;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
tot=;//代表新建了一个根节点
//一开始不能直接赋值为2,因为可能会是一颗空树
memset(ch,,sizeof(ch));
memset(book,,sizeof(book));
int ans=;
for(int i=; i<n; i++)
{
scanf("%s",a);
len=strlen(a);
if(insertt(a)==)
ans=;
}
if(ans==)//不存在前缀关系的情况输出YES,审题
printf("YES\n");
else
printf("NO\n");
}
return ;
}
POJ3630-Phone List-Trie字典树模板题的更多相关文章
- 字典树模板题(统计难题 HDU - 1251)
		
https://vjudge.net/problem/HDU-1251 标准的字典树模板题: 也注意一下输入方法: #include<iostream> #include<cstdi ...
 - CH 1601 - 前缀统计 - [字典树模板题]
		
题目链接:传送门 描述给定 $N$ 个字符串 $S_1,S_2,\cdots,S_N$,接下来进行 $M$ 次询问,每次询问给定一个字符串 $T$,求 $S_1 \sim S_N$ 中有多少个字符串是 ...
 - HDU 1251 统计难题(字典树模板题)
		
http://acm.hdu.edu.cn/showproblem.php?pid=1251 题意:给出一些单词,然后有多次询问,每次输出以该单词为前缀的单词的数量. 思路: 字典树入门题. #inc ...
 - HDU - 1251  字典树模板题
		
Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀). Input输入数据的第一部 ...
 - (模板)hdoj1251(字典树模板题)
		
题目链接:https://vjudge.net/problem/HDU-1251 题意:给定一系列字符串之后,再给定一系列前缀,对每个前缀查询以该字符串为前缀的字符串个数. 思路: 今天开始学字典树, ...
 - P1184 高手之在一起(字典树模板题,hash算法, map)
		
哎,唯一值得说明的是,这道题的输入有bug 先把字典树的算法模板放一下 #include<iostream> #include<cstring> using namespace ...
 - HDU 2072 - 单词数 - [(有点小坑的)字典树模板题]
		
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2072 Problem Descriptionlily的好朋友xiaoou333最近很空,他想了一件没有 ...
 - trie字典树模板浅析
		
什么是trie? 百度百科 又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种.典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计.它的 ...
 - hdu 1251  字典树模板题 ---多串 查找单词出现次数
		
这道题题目里没有给定数据范围 我开了2005 疯狂的WA 然后开了50000, A掉 我以为自己模板理解错 然后一天没吃饭,饿得胃疼还是想着把这题A掉再去吃,谁知竟然是这样的问题,,,呵呵~~~ ...
 
随机推荐
- java集合框架面试要点整理
 - networkComms 通信框架之 消息处理器
			
经常做Tcp通信的朋友知道,客户端发送数据到服务器 或者 服务器发送消息到客户端,接收端都要有相对应的处理器来对消息进行处理. 这里有两个概念 需要进行区别 消息类型 实际的数据类型 这里指的是未被 ...
 - python基础【第六篇】
			
list列表 基本结构 lst =[1,2,3,5,6] 为什么学列表? 列表能够存储比字符串更多的数据 列表能够存储各种数据类型 列表的注意点 列表是有序的 列表是可变的,支持索引,切片,步 切片后 ...
 - java虚拟机规范(se8)——java虚拟机的编译(二)
			
3.3 算术运算 java虚拟机通常在操作数栈上进行算术运算(例外情况是iinc指令,它直接增加一个局部变量的值).例如下面的align2grain()方法,它的作用是将int值对齐到2的指定次幂: ...
 - Django rest_framework 自动生成接口文档
			
自动生成接口文档 REST framework可以自动帮助我们生成接口文档. 接口文档以网页的方式呈现. 自动接口文档能生成的是继承自APIView及其子类的视图. 1. 安装依赖 REST fram ...
 - list采坑记录一下
			
List<Integer> cards = Lists.newArrayList(6,10,11,12,21,23,29,30,38,39,42,43,46,51,53,59,60);Li ...
 - Linux服务器上创建日志服务器和FTP服务器
			
参考地址: http://www.111cn.net/sys/CentOS/81133.htm https://www.cnblogs.com/laoxiajiadeyun/p/9943742.htm ...
 - 使用truelicense实现用于JAVA工程license机制(包括license生成和验证)
			
开发的软件产品在交付使用的时候,往往会授权一段时间的试用期,这个时候license就派上用场了.不同于在代码中直接加上时间约束,需要重新授权的时候使用license可以避免修改源码,改动部署,授权方直 ...
 - python_django_上传文件
			
存储路径: 存储在服务器的项目的static/upfile(你说了算的文件名,但是一般俺们叫这个)文件中 配置: 配置settings.py文件 MDEIA_ROOT = os.path.join(B ...
 - javac无效问题解决
			
首先去下载JDK的最新版本,目前应该是1.7,具体下载地址可以百度去搜索下载 步骤阅读 2 下载时候要注意自己系统的版本,JDK分32位和64位版,根据自己系统版本下载. 步骤阅读 3 下载完后安装, ...