洛谷P2580 于是他错误的点名开始了 题解
qwq!为什么!木有非结构体非指针的题解怎么阔以!所以, 我来辽~咻咻咻~ 题面 来分析, 我们可以先建一棵树,来存储整个名单, 然后再判断
for (int i = 1; i <= n; i++) {root = 0;cin >> ch;int len = strlen (ch);for (int j = 0; j < len; j++) {int nu = ch[j] - 'a';if (!tr[root][nu]) tr[root][nu] = ++tot;root = tr[root][nu];}f[root] = 1;}
这一段代码是具体的存储的过程, f数组用来存储整个单词被用过几次。可以自己分析品味一哈, 这个root变量到最后存储的其实就是您目前存储的单词的最后一个字母, 也就是代表了这个单词的结束, 所以直接用root这个变量来表示这个单词被用过几次即可。
for (int j = 0; j < len; j++) {int nu = ch[j] - 'a';if (!tr[root][nu]) {printf ("WRONG\n");break;}root = tr[root][nu];if (j == len - 1 && f[root] == 2) printf ("REPEAT\n");if (j == len - 1 && f[root] == 1) f[root] = 2,printf ("OK\n"); }
查询, 根据题目意思, 按要求输出, 并且要注意换行, 大写之类的细节性问题。要注意, 每一次判断到最后的时候, 判断是否是被用过, 没有被用过的, 需要标记表示应经用过了
再就是root这个变量每次都要更新(我真的调了好久)
完整代码:
#include <iostream> #include <cstdio> #include <cstring> using namespace std; char ch[800000]; int n, m, tr[8000000][26], s, root, tot, f[8000000]; int main () {scanf ("%d", &n);for (int i = 1; i <= n; i++) {root = 0;cin >> ch;int len = strlen (ch);for (int j = 0; j < len; j++) {int nu = ch[j] - 'a';if (!tr[root][nu]) tr[root][nu] = ++tot;root = tr[root][nu];}f[root] = 1;}scanf ("%d", &m);for (int i = 1; i <= m; i++) {root = 0;cin >> ch;int len = strlen (ch);for (int j = 0; j < len; j++) {int nu = ch[j] - 'a';if (!tr[root][nu]) {printf ("WRONG\n");break;}root = tr[root][nu];if (j == len - 1 && f[root] == 2) printf ("REPEAT\n");if (j == len - 1 && f[root] == 1) f[root] = 2,printf ("OK\n"); }}return 0; }
谢谢~
转载于:https://www.cnblogs.com/yanxiujie/p/11191685.html
洛谷P2580 于是他错误的点名开始了 题解相关推荐
- 字典树模板+洛谷P2580 于是他错误的点名开始了
题目: 题目背景 XS中学化学竞赛组教练是一个酷爱炉石的人. 他会一边搓炉石一边点名以至于有一天他连续点到了某个同学两次,然后正好被路过的校长发现了然后就是一顿欧拉欧拉欧拉(详情请见已结束比赛 CON ...
- 洛谷入门1【顺序结构】题单题解
目录 超级玛丽 字母转换 数字反转 再分肥皂水 小鱼的游泳时间 小学数学N合1 三角形面积 苹果和虫子 对角线 上学迟到 [入门1]顺序结构 - 题单 - 洛谷 | 计算机科学教育新生态 (luogu ...
- [Trie] Luogu P2580 于是他错误的点名开始了
题目描述 这之后校长任命你为特派探员,每天记录他的点名.校长会提供化学竞赛学生的人数和名单,而你需要告诉校长他有没有点错名.(为什么不直接不让他玩炉石.) 输入输出格式 输入格式: 第一行一个整数 n ...
- Luogu P2580 于是他错误的点名开始了 Trie树 字典树
字典树裸题.每次插入询问串,查询的时候拿出来直接查,信息保留在节点上. #include <bits/stdc++.h> using namespace std;char s[51]; i ...
- 洛谷P2336 喵星球上的点名
解:SAM + 线段树合并 + DFS序. 姓和名之间插入特殊字符,转化为下题: 给定串集合S,T,问S中每个串包含了T中的几个串?T中每个串被多少个S中的串包含? 解:对S建广义SAM,并线段树合并 ...
- 洛谷3384:【模板】树链剖分——题解
https://www.luogu.org/problemnew/show/P3384 如题,已知一棵包含N个结点的树(连通且无环),每个节点上包含一个数值,需要支持以下操作: 操作1: 格式: 1 ...
- 洛谷 P3244 / loj 2115 [HNOI2015] 落忆枫音 题解【拓扑排序】【组合】【逆元】
组合计数的一道好题.什么非主流题目 题目背景 (背景冗长请到题目页面查看) 题目描述 不妨假设枫叶上有 \(n\) 个穴位,穴位的编号为 \(1\sim n\).有若干条有向的脉络连接着这些穴位. ...
- 洛谷 P5713、P5719、P5730、P5737题 题解(Java语言描述)
P5713 题目要求 P5713题目链接 AC代码(Java语言描述) import java.util.Scanner;public class Main {public static void m ...
- 大数高精加减乘除(洛谷P1601、P2142、P1303、P1480题题解,Java语言描述)
写在前面 算法归算法,有现成的API能用为什么不用? (纯算法党别喷我,以后我再写高精算法的文) P1601 → A+B Problem 题目要求 P1601题目链接 AC代码(Java语言描述) i ...
- 洛谷P5733、P5734、P5735、P5739题题解(Java语言描述)
P5733题目要求 P5733题目链接 P5733分析 toUpperCase()就行了-- P5733AC代码(Java语言描述) import java.util.Scanner;public c ...
最新文章
- CSS实现自适应浏览器宽度的正方形
- Error: No module named books
- Raspberry Pi 4B 开机自动运行Python文件
- 微软服务器无法删除不了,微软终于决定解决 “进程占用而无法删除某文件”的问题...
- QT udp自动获取对方ip和端口号
- 【Python】正负无穷
- OpenWindow.document.write();
- SRS(simple-rtmp-server)流媒体服务器源码分析--启动
- 3dmax模型转换为*.FLT格式的建模要点
- 计算机专业必备电子书单
- 卡顿、画面撕裂、延迟、晕眩为什么与帧率、刷新率有关
- html5 显示k线图,canvas绘图,html5 k线图,股票行情图
- 音符起始点检测(音频节奏检测)(5)
- Scala中的集合排序总结
- 计算机应用基础学习网站,《计算机应用基础》学习手册.pdf
- Chrome 无法显示网页 错误码:STATUS_INVALID_IMAGE_HASH
- pycharm安装与配置Pyqt5
- 单目标优化、多目标优化
- Batch Normalization(BN)超详细解析
- 11万字AI赋能智慧水利模型训练平台建设方案
热门文章
- 拓端tecdat|R语言多项式回归拟合非线性关系
- hibernate教程笔记4
- C语言模拟信号量解决同步、互斥问题
- 【C/C++】C++重复率最高、最经典面试题/笔试题【持续更新】
- C++ const,static,inline
- Linux ubuntu centos 文件目录是什么意思
- 日期范围选择类日历(增强版)
- php session失效
- php socket邮箱,phpsocket.io php版本的socket.io
- 树莓派 口罩识别 python_RaspberryPi上实现佩戴口罩识别——2020电赛F题小记