水一发trie板子~

先说这个题怎么套上板子

首先我们判断是否有前缀可以边插入边判断

当我们经过了一个完整的字符串(即当前节点到了一个有标记的节点上)

就是有前缀

我们当然也可以无脑先判断一发(比如我这个)

然后无脑插入就是

减少了一定的编程难度


然后我丧心病狂异想天开写了一发动态的trie

指针警告

好处是内存省下来了

当然删除的时间上来说是省不下来了

具体看代码(代码向预警)

#include <iostream>
#include <cstdio>
#include <string> using namespace std;
//字典集合大小
const int Z=10;
struct trie{
//Z个子节点
trie *ch[Z];
//是否存在字符串的标记挂载
bool vst;
}rt,*root=&rt;//根节点
//输入用的字符串
string input; void insert(string str)
{
if (str.size()<1)return ;//空字符串返回
trie *now=root;//从根节点开始向下插入
for (register int i=0;i<str.size();i++)
{
int num=str[i]-'0';//子节点下标
if (now->ch[num]==NULL)//需要开一个新的节点
{
now->ch[num]=new trie();//纳新
//初始化节点(也可以写到构造函数里
for (register int j=0;j<Z;j++)
{
now->ch[num]->ch[j]=NULL;//设置成空
now->ch[num]->vst=false;//设置不存在当前子节点表示的字符串
}
now=now->ch[num];//向下一个节点移动
}
else now=now->ch[num];//向下一个节点移动
}
now->vst=true;//挂载当前字符串
} bool find(string str)
{
if (str.size()<1)return true;//空字符串走人
trie *now=root;//从根节点开始
for (register int i=0;i<str.size();i++)
{
int num=str[i]-'0';//下标
//如果存在没有插入的节点,而且没有经过任何一个完整的字符串,
//一定是不存在任何一个字符串与其为前缀关系
if (now->ch[num]==NULL)return false;
else
{
//经过一个完整的字符串,即经过的这个字符串
//是str的前缀
if (now->ch[num]->vst)return true;
now=now->ch[num];//向下一个节点移动
}
}
//存在另一个字符串包含这个字符串
//即有另一个字符串使得这个字符串是其前缀
return true;
}
//无脑删除,回收空间
void dfs(trie *now)
{
for (register int i=0;i<10;i++)
{
if (now->ch[i]!=NULL)
dfs(now->ch[i]);
}
if (now!=root)delete now;
}
//重新建树
void build()
{
dfs(root);
for (register int i=0;i<10;i++)
{
root->ch[i]=NULL;
}
root->vst=false;
} int main()
{
int T,n;
cin>>T;
while (T--)
{
bool flag=false;
//先重新建空树
build();
cin>>n;
while (n--)
{
cin>>input;
//只要是存在前缀关系就行
flag=find(input)||flag;
insert(input);
}
//存在即NO
puts(flag?"NO":"YES");
}
return 0;
}

题解 SP4033 【PHONELST - Phone List】的更多相关文章

  1. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  2. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  3. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  4. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  5. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  6. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  7. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  8. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

  9. CF100965C题解..

    求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...

随机推荐

  1. 【NOIP2017】列队【可持久化线段树】

    题目链接 题目描述 Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia 所在的方阵中有n×mn×m名学生,方阵的行数为 n ...

  2. Docker 换源

    近几天又折腾起 docker来了    我发现自己在拉镜像的时候,总是超时    然后百度了一下  说要换源 90sec的一个水友 推荐了我 阿里云的加速源    我看了还是免费就想试一下 讲一下过程 ...

  3. opencv部署服务器报错

    报错内容: ImportError: libSM.so.6: cannot open shared object file: No such file or directory 解决办法: sudo ...

  4. 08 (h5*) js第9天--原型、继承

    目录: 1:原型和原型链 2:构造函数的原型可以改变 3:原型的最终指向 4:先修改原型指向,在添加方法. 5:实例对象中的属性和原型属性重合, 6:一个神奇的原型链 7:继承 8:原型链 9:利用c ...

  5. input复制文本

    input.value = this.$t('title') document.body.appendChild(input) input.select() input.setSelectionRan ...

  6. Markdown列表中嵌套代码带来的问题

    目录 1.问题描述 2.原因查找 3.问题解决 使用Markdown时,在有序列表中嵌套代码块引发了有序列表编号中断(重新从1开始)的问题,最终已解决. 1.问题描述 代码: 1. title tex ...

  7. spring-第七篇之深入理解容器中的bean

    1.抽象bean与子bean 用于指定配置模板. 2.容器中的工厂bean 这种工厂bean必须实现FactoryBean接口,通过spring容器getBean()方法获取它时,容器返回的不是Fac ...

  8. jvm学习(3)方法区、堆、对象存储位置

    方法区 方法区,Method Area, 对于习惯在HotSpot虚拟机上开发和部署程序的开发者来说,很多人愿意把方法区称为“永久代”(Permanent Generation),本质上两者并不等价, ...

  9. tomcat安装分享

    安装Tomcat前需要安装JDK 安装的jdk1.8   解压   在vim /etc/profile下面添加以下内容 export JAVA_HOME=/jdk/jdk1.8.0_111export ...

  10. SQL server2000 创建表单的方法(已实践检验)

    我的系统是win7旗舰版的,在安装完SQL server2000之后,单击表,右键-新建表时,系统要么弹出:MMC检测到此管理单元发生一个错误.要么直接弹出microsoft sql server 2 ...