018(Phone List)(字典树)
题目:http://ybt.ssoier.cn:8088/problem_show.php?pid=1471
题目思路:
这不就是一个超级明显的字典树嘛
字典树,又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常。。。。。。
以单词 will,wet,colorful,colors举例做树
它从一个根节点开始(这边根节点统一为空,因为我们要存的是形形色色百十个字符串,强行做一个根节点显然不太合适)
根节点上分裂出一个字母,这个字母是某个单词的打头字母
第一个单词 will,它的打头字母是w,那么,根节点上出来一个w
紧接着,分裂出来的字母继续向下分裂,第二个字母,亦或者第n个字母就都出来了
那就形成了这样一个格局:根节点的一个孩子是 w,w 的一个孩子是 i,i 的一个孩子是 l,l 还有一个孩子 l 。
接着把下一个单词 wet 打进来,发现,打头字母全是 w
“那你总不可能把他们放在一起去吧!” “对啊” ”。。。。。。”
是的,在字典树里是有公共节点的可能的,而如果公共节点的的下一个节点还相同,那就还是公共的
自此,一个字典树就这么被建立起来了
等等,貌似能直接表示树的结构现在还没出生呢
针对这个,聪明的祖先们想到了用数组模拟的办法
| a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z | |
| 0 | 7 | 1 | ||||||||||||||||||||||||
| 1 | 5 | 2 | ||||||||||||||||||||||||
| 2 | 3 | |||||||||||||||||||||||||
| 3 | 4 | |||||||||||||||||||||||||
| 4 | ||||||||||||||||||||||||||
| 5 | 6 | |||||||||||||||||||||||||
| 6 | ||||||||||||||||||||||||||
| 7 | 8 | |||||||||||||||||||||||||
| 8 | 9 | |||||||||||||||||||||||||
| 9 | 10 | |||||||||||||||||||||||||
| 10 | 11 | |||||||||||||||||||||||||
| 11 | 12 | 15 | ||||||||||||||||||||||||
| 12 | 13 | |||||||||||||||||||||||||
| 13 | 14 | |||||||||||||||||||||||||
| 14 |
每一个行就是一层节点,这层节点向哪里分叉,是什么由纵列表示
不为零,就代表有东西,而这有了的东西又联系着下一个节点
妙哉妙哉
叨叨了这么久字典树,终于要回到正轨了
其实就是在字典树上加了两个判断
如果前面找的东西出来一个0,代表“路走斜了”,此时改变判断,告诉程序这里可能对不上
如果结尾处对上了,那就是短串与长串对上了,也要跟程序知会一声
但是,f1 和 f2 两个只要其中一个目标达成即可
如果是结尾对上了,那么上面必定对上,如果上面对不上它就不会回到结尾而是会另起一横行
如果上面对上了,结尾对不上,不排除先进短串后进长串的可能性,所以也是可以滴
综上,代码如下
#include<bits/stdc++.h>
using namespace std;
int len,root,tot,trie[1000000][10],f[100000];
int t,n,q,f1,f2;
string s;
//常规操作
int insert(){
len=s.size();
root=0;
for(int i=0;i<len;i++){//建树加判断
int id=s[i]-'0';//先把纵列搞出来
if(!trie[root][id]){//如果对不上了
trie[root][id]=++tot;//另起一行
f1=1;//知会一声
}
root=trie[root][id];//更新子节点
if(f[root]==1){//结尾能对上了
f2=1;//也要知会一声
}
}
f[root]=1;//为以后的“结尾能对上”铺路
return f1==0||f2==1;//两个条件达成一个即可
return 0;
}
int main(){
cin>>t;
while(t--){
cin>>n;
memset(trie,0,sizeof(trie));
memset(f,0,sizeof(f));
q=0;tot=0;
//记得归零
while(n--){
cin>>s;
f1=0;f2=0;
//记得归零
if(insert()==1){
q=1;
}
}
if(q==1){//满足要求了
cout<<"NO"<<endl;
//按他的想法输出
}
else{//不满足
cout<<"YES"<<endl;
//也要按照它的想法输出
//这题的NO和YES反过来了
//大家注意一下
}
}
return 0;
}
题目总结:背熟字典树模板
还有就是后面的“两个条件达成一个即可”要捋清楚
018(Phone List)(字典树)的更多相关文章
- 萌新笔记——用KMP算法与Trie字典树实现屏蔽敏感词(UTF-8编码)
前几天写好了字典,又刚好重温了KMP算法,恰逢遇到朋友吐槽最近被和谐的词越来越多了,于是突发奇想,想要自己实现一下敏感词屏蔽. 基本敏感词的屏蔽说起来很简单,只要把字符串中的敏感词替换成"* ...
- [LeetCode] Implement Trie (Prefix Tree) 实现字典树(前缀树)
Implement a trie with insert, search, and startsWith methods. Note:You may assume that all inputs ar ...
- 字典树+博弈 CF 455B A Lot of Games(接龙游戏)
题目链接 题意: A和B轮流在建造一个字,每次添加一个字符,要求是给定的n个串的某一个的前缀,不能添加字符的人输掉游戏,输掉的人先手下一轮的游戏.问A先手,经过k轮游戏,最后胜利的人是谁. 思路: 很 ...
- 萌新笔记——C++里创建 Trie字典树(中文词典)(一)(插入、遍历)
萌新做词典第一篇,做得不好,还请指正,谢谢大佬! 写了一个词典,用到了Trie字典树. 写这个词典的目的,一个是为了压缩一些数据,另一个是为了尝试搜索提示,就像在谷歌搜索的时候,打出某个关键字,会提示 ...
- 山东第一届省赛1001 Phone Number(字典树)
Phone Number Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 We know that if a phone numb ...
- 字典树 - A Poet Computer
The ACM team is working on an AI project called (Eih Eye Three) that allows computers to write poems ...
- trie字典树详解及应用
原文链接 http://www.cnblogs.com/freewater/archive/2012/09/11/2680480.html Trie树详解及其应用 一.知识简介 ...
- HDU1671 字典树
Phone List Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- *HDU1251 字典树
统计难题 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131070/65535 K (Java/Others)Total Submi ...
随机推荐
- 11.Flink实时项目之支付宽表
支付宽表 支付宽表的目的,最主要的原因是支付表没有到订单明细,支付金额没有细分到商品上, 没有办法统计商品级的支付状况. 所以本次宽表的核心就是要把支付表的信息与订单明细关联上. 解决方案有两个 一个 ...
- 简单手写一个jqurey
1 /** 2 * @description 手写jquery 3 * @author ddxldxl 4 */ 5 class Jquery { 6 constructor(selector) { ...
- 2003031121-浦娟-python数据分析第四周作业-第二次作业
项目 内容 课程班级博客链接 20级数据班(本) 作业链接 Python第四周作业第二次作业 博客名称 2003031121-浦娟-python数据分析第四周作业-matolotlib的应用 要求 每 ...
- 使用C#跨PC 远程调用程序并显示UI界面
在项目中有一个需求是需要在局域网内跨PC远程调用一个程序,并且要求有界面显示,调查了一些资料,能实现远程调用的.Net技术大概有PsExec.WMI.Schedule Task. 这三种方式都做了一个 ...
- React 与 Hooks 如何使用 TypeScript 书写类型?
React 与 Hooks 如何使用 TypeScript 书写类型? 本文写于 2020 年 9 月 20 日 函数组件与 TS 对于 Hooks 来说是不支持使用 class 组件的. 如何在函数 ...
- 我怀疑这是IDEA的BUG,但是我翻遍全网没找到证据!
你好呀,我是歪歪. 前几天有朋友给我发来这样的一个截图: 他说他不理解,为什么这样不报错. 我说我也不理解,把一个 boolean 类型赋值给 int 类型,怎么会不报错呢,并接着追问他:这个代码截图 ...
- Spring Boot 动态修改 log level
引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>sp ...
- linux篇-CentOS7搭建NTP服务器
1查看服务器.客户端操作系统版本 2查看服务器是否安装ntp 3如果没有安装 4安装完成后重新查看服务器是否安装ntp 5查看ntp服务器状态 6修改配置文件 注释 #server 0.centos. ...
- Fail2ban 使用Fail2ban监禁SSH服务的恶意IP
Fail2ban自带了很多服务的过滤器(filter)和动作(action),它已经帮你做好了,所以一般情况下我们无需定义,直接引用即可. 这边只是一个示例. 系统版本:Ubuntu 16.04.5 ...
- 在vue中路径中的@
1.在Vue的路径中@等于src 2.在css的路径中~@等于src