水一发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. 关于this、Echarts中的data

    this是指当前对象 移除class的jQuery代码:$('ur.nav li:eq(0)').removeClass('active') 添加class的jQuery代码:$('ur.nav li ...

  2. GitBook "How to be a programmer"

    网址:https://www.gitbook.com/book/braydie/how-to-be-a-programmer/ 最近看了这本 GitBook,主要讲程序员应该掌握的技能和注意的问题,分 ...

  3. PHPer面试指南-laravel 篇

    简述 Laravel 的生命周期 Laravel 采用了单一入口模式,应用的所有请求入口都是 public/index.php 文件. 注册类文件自动加载器 : Laravel通过 composer ...

  4. Scala操作外部数据

    Scala操作外部数据: 1.操作文件 2.操作XML 3.操作MySQL 读取文件: object FileApp { def main(args: Array[String]): Unit = { ...

  5. 线程休眠只会用 Thread.sleep?来,教你新姿势!

    线程休眠是 Java 开发经常会用到的一个手段,就是让当前线程睡一会儿,睡醒之后再继续运行. 咱大多数程序员,多线程虽然学得不好,但线程休眠,无人不知,无人不晓,也都会用,不就是用 Thread.sl ...

  6. python小学堂1

    sun=0 start=1 while True: start1=start%2 if start1==1: sun = start + sun elif start1==0: sun=sun-sta ...

  7. python学习二十四天函数参数之默认参数

    函数参数就是向函数传递参数,可以传递一个,可以是更多个,有的参数有值,有的没有,函数可以设置默认参数,默认参数必须放参数最后面. 1,不传递参数,设置默认参数 def hello(a,b,c='123 ...

  8. 同一客户端多个git账号的配置

    同一客户端多个git账号的配置 同一客户端多个git账号的配置 步骤一:用ssh-keygen命令生成一组新的id_rsa_new和id_rsa_new.pub. 1 ssh-keygen -t rs ...

  9. AJAX —— JSON 字符串 与 JSON 对象

    一.JSON 字符串转 JSON 对象 ----> JSON.parse(JString); 1 // JSON 字符串转 JSON 对象 ----> JSON.parse(JString ...

  10. ajax中的application/x-www-form-urlencoded中的使用[转]

    一,HTTP上传的基本知识 在Form元素的语法中,EncType表明提交数据的格式 用 Enctype 属性指定将数据回发到服务器时浏览器使用的编码类型.下边是说明: application/x-w ...