水一发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. tbox协程使用之切换与等待

    tbox的协程实现,是stackfull模式的,需要指定独立堆栈和协程函数,目前暂时还不能像golang那样实现堆栈的动态增长,之后会对其进行支持. 目前提供下面一些功能特性: 1. 提供yield切 ...

  2. 9、numpy——数组操作

    Numpy 中包含了一些函数用于处理数组,大概可分为以下几类: (1)修改数组形状 (2)翻转数组 (3)修改数组维度 (4)连接数组 (5)分割数组 (6)数组元素的添加与删除 1.修改数组形状 函 ...

  3. python 日产经销商

    ''' ajaxCallSiteInfo: {1C8B2BC6-35E2-460E-A63D-3576F3039D79} ''' import requests import json from db ...

  4. 阿里云ECS服务安装 nginx+php+MariaDB完整版

    安装 Nginx想在 CentOS 系统上安装 Nginx ,你得先去添加一个资源库,像这样: vim /etc/yum.repos.d/nginx.repo使用 vim 命令去打开 /etc/yum ...

  5. Ubuntu18.04+CUDA9.0+cuDNN7.1.3+TensorFlow1.8 安装总结

    Ubuntu18.04发行已经有一段时间了,正好最近Tensorflow也发布了1.8版本,于是决定两个一起装上,以下是安装总结,大致可 以分为5个步骤 确认当前软件和硬件环境.版本 更新显卡驱动,软 ...

  6. Spring Boot 项目 Maven 配置

    在配置基于Maven的Spring Boot项目的过程中,打包运行出现了一系列错误. 比如: mvn 中没有主清单属性.java.lang.NoClassDefFoundError: org/spri ...

  7. CentOS下安装中文man 手册

    为了方便使用man,安装中文手册,具体如下: 版本:CentOS release 6.6 (Final) 中文包:http://pkgs.fedoraproject.org/repo/pkgs/man ...

  8. 一、C#获取特性(坑)

    一.C#获取特性(坑) [Description("系统状态码")] [Display(Name = "成功", Description = "请求成 ...

  9. python常用函数 L

    lstrip(str) 删除字符串左边的字符,支持传入参数. 例子: ljust(int) 格式化字符串,左对齐,支持传入填充值. 例子: loads(json) 将json字符串转换为dict. 例 ...

  10. c++消息中间件

    ZeroMQ ActiveMQ-CPP 另外 ZeroMQ 的作者用 C 重构了一套.改名叫:nanomsg ZeroMQ:https://www.cnblogs.com/rainbowzc/p/33 ...