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/ 这道题想了好久. 做法是对第一个串建后缀自动机,然后用后面的串去匹配它,并在走过的状态上记录走到这个状态时的最长距离.每匹配完一个 ...
随机推荐
- 一天十道Java面试题----第一天(面向对象-------》ArrayList和LinkedList)
这里是参考B站上的大佬做的面试题笔记.大家也可以去看视频讲解!!! 文章目录 1.面向对象 2.JDK.JRE.JVM区别和联系 3.==和equals 4.final 5.String .Strin ...
- 2022最新版JDK1.8的安装教程、包含jdk1.8的提取码(亲测可用)
文章目录 1.jdk的安装 1.1.下载(百度网盘jdk1.8提取码永久有效) 1.2.双击提取出来的exe,运行程序.如下图 1.3.进入安装向导 1.4.选择默认(安装所有的组件).同时更改安装路 ...
- spring boot+vue前后端项目的分离(我的第一个前后端分离项目)
文章目录 1.前端vue的搭建 2.后端项目的构建 pom文件中引入的jar包 yml文件用来配置连接数据库和端口的设置 application.property进行一些整合 controller层( ...
- JVM运行时数据区域详解
参考文章: <Java Se11 虚拟机规范> <深入理解Java虚拟机-JVM高级特性与最佳实践 第3版>- 周志明 本文基于Java Se 11讲解. 根据<Java ...
- created与mounted执行顺序(关于微任务与宏任务)
1.ps:只要你只使用created或者mounted中的一个不就好了吗[dog].这样只要在第一个异步任务代码跳出前,嵌套第二个任务函数就好了 最后面的两个链接一个是微任务与宏任务的通俗例子,一个是 ...
- git pull与git pull --rebase
aliases: [] tags: [git] link: date: 2022-08-30 目录 git pull --rebase 等效命令 总结 参考文章 git pull --rebase 在 ...
- 一、Redis的Java客户端
模糊的目标,要不断去解释它们,把他们转化成一个更具体的内容,这样才能够找到途径. 常用客户端介绍 Jedis客户端 基本使用(直连) 引入对应依赖 <dependency> <gro ...
- DevOps 必备的 Kubernetes 安全清单
Kubernetes 是当今许多公司采用的容器编排平台,它的实施需要对其生态系统有一定的了解,以便部署一个准备好用于生产的集群.然而从原则上来说,Kubernetes 并不是一个安全的平台,因为它缺乏 ...
- 【Docker】容器使用规范--安全挂载建议
容器挂载过程和安全挂载建议 绑定挂载 本文所提到的挂载主要指绑定挂载(bind mount),即通过-v /xx/xx:/xx/xx 和 --mount type=bind,xxx,xxx两种方式设置 ...
- windows10 ftp文件夹错误
遇到问题: 解决办法: 1. cmd直接访问 ftp ip 2. 启用tftp client 从文件夹访问 注直接访问会弹出如之前报错一样的失败:ftp://ip ftp://用户:密码@ip 使用如 ...