SPOJ PHONELST - Phone List | UVA11362 Phone List | LibreOJ10049. 「一本通 2.3 例 1」Phone List
简要题意
\(t\) 组数据,每组数据给定 \(n\) 个长度不超过 \(10\) 的数字串,判断是否有两个字符串 \(A\) 和 \(B\),满足 \(A\) 是 \(B\) 的前缀,若有,输出 NO
,若没有,输出 YES
。
\(1 \leq t \leq 40,1 \leq n \leq 10000\)
思路
\(O(tn^2)\) 的 Hash 无法通过本题,考虑 Trie。
将 \(n\) 个字符串插入一个 Trie,然后枚举字符串 \(B\),如果存在字符串 \(A\) 是 \(B\) 的前缀,那么在字典树上遍历到 \(B\),中间必定经过 \(A\) 的最后一个字符表示的节点。
最终思路:将 \(n\) 个字符串插入一个 Trie,我们考虑维护一个布尔数组 \(E\),\(E_i\) 表示字典树节点 \(i\) 是否为一个输入的字符串的最后一个字符表示的节点,这个好维护。然后枚举 \(B\),在字典树中 DFS 到 \(B\),判断沿途节点是否存在 \(E_i=\operatorname{true}\) 即可。
时间复杂度 \(O(10nt)\)。
代码
#include <cstring>
#include <iostream>
#define int long long
using namespace std;
int tree[100005][15],tot;
bool endd[100005];
string s[100005];
void insert(string x,int id){
int now=0;
for(char ch:x){
if(!tree[now][ch-'0']){
tree[now][ch-'0']=(++tot);
}
now=tree[now][ch-'0'];
}
endd[now]=1;
}
void solve(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
string x;
cin>>x;
insert(x,i);
s[i]=x;
}
for(int i=1;i<=n;i++){
int now=0;
for(char ch:s[i]){
if(endd[now]){
cout<<"NO"<<'\n';
return;
}
if(!tree[now][ch-'0']){
tree[now][ch-'0']=(++tot);
}
now=tree[now][ch-'0'];
}
}
cout<<"YES"<<'\n';
}
signed main(){
int t;
cin>>t;
while(t--){
memset(tree,0,sizeof(tree));
memset(endd,0,sizeof(endd));
tot=0;
solve();
}
return 0;
}
SPOJ PHONELST - Phone List | UVA11362 Phone List | LibreOJ10049. 「一本通 2.3 例 1」Phone List的更多相关文章
- SPOJ 16549 - QTREE6 - Query on a tree VI 「一种维护树上颜色连通块的操作」
题意 有操作 $0$ $u$:询问有多少个节点 $v$ 满足路径 $u$ 到 $v$ 上所有节点(包括)都拥有相同的颜色$1$ $u$:翻转 $u$ 的颜色 题解 直接用一个 $LCT$ 去暴力删边连 ...
- CSU训练分类
√√第一部分 基础算法(#10023 除外) 第 1 章 贪心算法 √√#10000 「一本通 1.1 例 1」活动安排 √√#10001 「一本通 1.1 例 2」种树 √√#10002 「一本通 ...
- BZOJ 2588: Spoj 10628. Count on a tree [树上主席树]
2588: Spoj 10628. Count on a tree Time Limit: 12 Sec Memory Limit: 128 MBSubmit: 5217 Solved: 1233 ...
- SPOJ DQUERY D-query(主席树)
题目 Source http://www.spoj.com/problems/DQUERY/en/ Description Given a sequence of n numbers a1, a2, ...
- SPOJ GSS3 Can you answer these queries III[线段树]
SPOJ - GSS3 Can you answer these queries III Description You are given a sequence A of N (N <= 50 ...
- 【填坑向】spoj COT/bzoj2588 Count on a tree
这题是学主席树的时候就想写的,,, 但是当时没写(懒) 现在来填坑 = =日常调半天lca(考虑以后背板) 主席树还是蛮好写的,但是代码出现重复,不太好,导致调试的时候心里没底(虽然事实证明主席树部分 ...
- SPOJ bsubstr
题目大意:给你一个长度为n的字符串,求出所有不同长度的字符串出现的最大次数. n<=250000 如:abaaa 输出: 4 2 1 1 1 spoj上的时限卡的太严,必须使用O(N)的算法那才 ...
- 【SPOJ 7258】Lexicographical Substring Search
http://www.spoj.com/problems/SUBLEX/ 好难啊. 建出后缀自动机,然后在后缀自动机的每个状态上记录通过这个状态能走到的不同子串的数量.该状态能走到的所有状态的f值的和 ...
- 【SPOJ 1812】Longest Common Substring II
http://www.spoj.com/problems/LCS2/ 这道题想了好久. 做法是对第一个串建后缀自动机,然后用后面的串去匹配它,并在走过的状态上记录走到这个状态时的最长距离.每匹配完一个 ...
随机推荐
- PHP开启debug模式
我用的是lnmp一键集成环境 所以我的php.ini在/usr/local/php/ 把这个值改成从 Off 改成On 即可
- 一个电器工厂可以生产多种类型的电器,如海尔工厂可以生产海尔电视机、海尔空调等,TCL工厂可以生产TCL电视机,TCL空调等,相同品牌的电器构成一个产品族,而相同类型的电器构成了一个产品等级结构,现使用
一个电器工厂可以生产多种类型的电器,如海尔工厂可以生产海尔电视机.海尔空调等,TCL工厂可以生产TCL电视机,TCL空调等,相同品牌的电器构成一个产品族,而相同类型的电器构成了一个产品等级结构,现使用 ...
- java中HashMap的设计精妙在哪?
摘要:本文结合图解和问题,教你一次性搞定HashMap 本文分享自华为云社区<java中HashMap的设计精妙在哪?用图解和几个问题教你一次性搞定HashMap>,作者:breakDaw ...
- a标签添加链接下划线样式
<a href="/aaaa.asp" target="_blank" style="text-decoration:underline;&qu ...
- SQL中的内置函数
IsNull的使用 isnull(name,' ')<>' ' ---如果name为null则就将name转化为' ',然后判断不等于' ', 目的:判断name不等于null ...
- Python基础部分:5、 python语法之变量与常量
目录 python语法之变量与常量 一.什么是变量与常量 1.什么是变量 2.什么是常量 二.变量的基本使用 1.代码中如何记录事物状态 2.变量使用的语法结构与底层原理 3.变量名的命名规范 4.变 ...
- 最长不下降子序列(线段树优化dp)
最长不下降子序列 题目大意: 给定一个长度为 N 的整数序列:A\(_{1}\),A\(_{2}\),⋅⋅⋅,A\(_{N}\). 现在你有一次机会,将其中连续的 K 个数修改成任意一个相同值. 请你 ...
- 上下文管理器 context managet
定义:实现了上下文管理协议的对象,主要用于保存和恢复各种全局状态,关闭文件等,它本身就是一种装饰器. with语句 with语句就是为支持上下文管理器而存在的
- 5种GaussDB ETCD服务异常实例分析处理
摘要:一文带你细数几种ETCD服务异常实例状态. 本文分享自华为云社区<[实例状态]GaussDB ETCD服务异常>,作者:酷哥 . 首先确认是否是虚拟机.网络故障 虚拟机故障导致ETC ...
- Redis 常见问题
Redis 常见问题 落叶他乡树,寒灯独夜人. 一. 什么是Redis? Redis 是一个使用 C 语言写成的,开源的高性能key-value非关系缓存数据库: Redis的数据都基于缓存的,所以很 ...