这个题的题解区就没一简单一点的指针题解?(大概是瞎了)

So,这篇题解是给那些想用指针而害怕的同学食用的qwq

记得有一篇题解有个dalao作者放了几个静态模拟的trie树结果最后放了个动态的跑路了.....
放个板子就跑路真的不好
所以本蒟蒻来一发1470ms & 63.52MB的——

动态的trie树qwq


另外一开始C++党的朴素想法是这样的(看看你想到了什么):

  1. 暴力搜索(结果应该是:TLE TLE TLE.....
  2. map另类暴力(结果应该是:AC AC ... AC TLE TLE TLE
  3. 暴力哈希(结果应该是:AC AC...AC TLE AC...
  4. 哈希STL之外的模板(结果应该大概是AC界面)
  5. STL前缀/二分搜索 竟然AC,WA,好强啊!
  6. STL的set (作者:好,算你狠)
  7. 静态模拟trie树(结果应该是卡了常数过去了Orz)
  8. 甚至还有链式前向星写的trie Orz......
  9. 正解:trie前缀树(动态)
  10. 玄学平衡树(快走,别理作者了⑧......)

(PHP的数组和STL的玄学做法真叫人质壁分离)


回到正题。

必备知识:指针的用法

  1. 指针是存储地址的数据类型
  2. 结构体中引用指针指向的元素需要用到->而不是小数点
  3. 不能访问空指针NULL,NULL是特殊的指针,叫空指针或零指针。
  4. 如果p指向a,那么*p相当于a
  5. 指针可以被指针或者地址赋值,但是不能被原元素赋值。
  6. 新分配给指针一个地址需要用new(c++)或者malloc(c,c++)。用法:p=new type_T();malloc暂时还不会

Q1:为什么使用指针动态地食用trie?

因为trie是经典的用空间换时间的数据结构,动态指针实现的trie可以用更少的时间最大限度地换回一部分空间。

Q2:为什么使用指针?

指针是结构体实现自引用结构的基础。
——清华大学出版社《c语言XX(第五版)》

Q3:如何实现trie树?

trie树的基本操作是插入,查找,删除操作。这是重点.jpg

首先是插入:

插入只需要两种操作方式:

  1. 如果有指向str[i]的指针,挪到指向str[i]的指针的位置。
  2. 如果还没有分配给指向str[i]的指针(默认是NULL),那么先将需要的指针分配一个空间,再执行操作1。

然后是查找:

  1. 如果有指向str[i]的指针,挪到指向str[i]的指针的位置。
  2. 如果没有指向str[i]的指针,直接返回说找不到字符串。
  3. 如果遍历完了字符串,就范围找到了字符串。

这个题特殊之处在于要多维护一个bool vst,表示是否已经念过这个字符串。
当遍历完了字符串以后,如果vst==true,就返回说已经念过了。
否则就vst=true,然后返回说没问题。

删除操作:

因为用了指针,所以其实也比较简单。
只需要递归到字符串的最后一个元素,然后回溯的时候删除指针即可。
或者开一个指针存一下父亲节点的地址,逆序递推也是可以的。
(本题目没有删除的相关操作)


然后说一下本题思路。
数据结构方面:
每一个trie指针节点存26个节点(表示下一个字符),一个vst(表示是否已经念过这个人名)。
算法方面:
先建一个插入n个字符串的trie,表示原先的人名。
然后查找m次,每次先判断出是否正确,然后会判断出是否已经重复,最后返回没毛病。(我用了unsigned char剩下了一点点空间......)
然后说一下getline毒瘤:是因为字符串最后都有一个换行,getline读入的时候会读进去,所以输出会占用一个空行,所以要么抹掉(substr),要么cin,要么就直接字符数组scanf读入。
最后放上代码:
C++ Code(太丑了,放到剪贴板里)


最后同 Wow_Goodjob dalao:炉石是个非常好的游戏(逃

题解 P2580 【于是他错误的点名开始了】的更多相关文章

  1. luogu P2580 于是他错误的点名开始了

    luogu  P2580 于是他错误的点名开始了 https://www.luogu.org/problem/show?pid=2580 题目背景 XS中学化学竞赛组教练是一个酷爱炉石的人. 他会一边 ...

  2. P2580 于是他错误的点名开始了(trie)

    P2580 于是他错误的点名开始了 题目背景 XS中学化学竞赛组教练是一个酷爱炉石的人. 他会一边搓炉石一边点名以至于有一天他连续点到了某个同学两次,然后正好被路过的校长发现了然后就是一顿欧拉欧拉欧拉 ...

  3. 【luogu P2580 于是他错误的点名开始了】 题解

    题目链接:https://www.luogu.org/problemnew/show/P2580 我真的永远都爱stl #include <map> #include <cstdio ...

  4. 洛谷P2580 于是他错误的点名开始了 题解

    qwq!为什么!木有非结构体非指针的题解怎么阔以!所以, 我来辽~咻咻咻~ 题面 来分析, 我们可以先建一棵树,来存储整个名单, 然后再判断 ; i <= n; i++) { root = ; ...

  5. 洛谷 P2580 于是他错误的点名开始了 题解

    每日一题 day10 打卡 Analysis trie树模板题,只需用到简单的插入和查询就好了 如果想要学trie树,见信息学奥赛一本通·提高篇P82 #include<iostream> ...

  6. P2580 于是他错误的点名开始了

    题目背景 XS中学化学竞赛组教练是一个酷爱炉石的人. 他会一边搓炉石一边点名以至于有一天他连续点到了某个同学两次,然后正好被路过的校长发现了然后就是一顿欧拉欧拉欧拉(详情请见已结束比赛CON900). ...

  7. 洛谷 P2580 于是他错误的点名开始了

    题目背景 XS中学化学竞赛组教练是一个酷爱炉石的人. 他会一边搓炉石一边点名以至于有一天他连续点到了某个同学两次,然后正好被路过的校长发现了然后就是一顿欧拉欧拉欧拉(详情请见已结束比赛CON900). ...

  8. 洛谷—— P2580 于是他错误的点名开始了

    https://www.luogu.org/problem/show?pid=2580 题目背景 XS中学化学竞赛组教练是一个酷爱炉石的人. 他会一边搓炉石一边点名以至于有一天他连续点到了某个同学两次 ...

  9. [洛谷P2580]于是他错误的点名开始了

    洛谷P2580的一个水题,用啥都能过,不过为了练习一下刚刚学会的字典树,还是认真做一下吧. #include <cstdio> #include <cstring> using ...

  10. [洛谷P2580]于是他错误的点名开始了(Trie树)

    传送门 洛谷P2580的一个水题,用啥都能过,不过为了练习一下刚刚学会的字典树,还是认真做一下吧. #include <cstdio> #include <cstring> u ...

随机推荐

  1. 2PC AND 3PC

    一.分布式数据一致性 在分布式系统中,为了保证数据的高可用,通常会将数据保留多个副本(replica),这些副本会放置在不同的物理的机器上. (1)什么是数据一致性 在数据有多份副本的情况下,如果网络 ...

  2. Junit测试中找不到junit.framework.testcase

    在使用Junit进行测试时,出现如下问题: 找不到junit.framework.testcase 解决方法: 选中项目->属性->Java构建路径->库->添加外部jar 在 ...

  3. python_分布式进程中遇到的问题

    看文档学习分布式进程中遇到了一下问题,文档里面例题是python2.X,我用的python3.x,就出现了一下莫名奇妙的问题,最终版代码先呈上: taskManager.py # coding:utf ...

  4. 20155232《网络对抗》Exp8 Web基础

    20155232<网络对抗>Exp 8 Web基础 一.实践内容 (1).Web前端HTML(0.5分) 能正常安装.启停Apache.理解HTML,理解表单,理解GET与POST方法,编 ...

  5. 20155232《网络对抗》Exp2 后门原理与实践

    20155232<网络对抗>Exp2 后门原理与实践 问题回答 1.例举你能想到的一个后门进入到你系统中的可能方式? 通过网页上弹出来的软件自动安装 2.例举你知道的后门如何启动起来(wi ...

  6. 2017-2018-1 20155320 嵌入式C语言——时钟

    2017-2018-1 20155320 嵌入式C语言--时钟 要求: 在作业本上完成附图作业,要认真看题目要求. 提交作业截图 作弊本学期成绩清零(有雷同的,不管是给别人传答案,还是找别人要答案都清 ...

  7. 20155331《网路对抗》Exp8 WEB基础实践

    20155331<网路对抗>Exp8 WEB基础实践 基础问题回答 什么是表单 表单在网页中主要负责数据采集功能.一个表单有三个基本组成部分: 表单标签,这里面包含了处理表单数据所用CGI ...

  8. jenkis +sonarqube 对后端代码静态扫描,钉钉群通知执行结果(记录)

    代码提交,触发后端sonar测试,测试完成,jenkins触发依赖任务,执行python脚本,达到预期,调用上线任务模块,进行上线,达不到预期,钉钉群通知. 牵涉到配置: 1.配置sonar测试任务 ...

  9. Edit Distance问题在两种编程范式下的求解

    本文已授权 [Coding博客](https://blog.coding.net) 转载 前言 Edit Distance,中文叫做编辑距离,在文本处理等领域是一个重要的问题,以下是摘自于百度百科的定 ...

  10. shell脚本之基础

    配置启动界面 vim /etc/inittab/  init3配置网卡 重启生效system-config-network网卡配置文件vim /etc/sysconfig/network-script ...