当前位置: 首页 > news >正文

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

【题目来源】

洛谷:P2580 于是他错误的点名开始了 - 洛谷

【题目描述】

这之后校长任命你为特派探员,每天记录他的点名。校长会提供化学竞赛学生的人数和名单,而你需要告诉校长他有没有点错名。(为什么不直接不让他玩炉石。)

【输入】

第一行一个整数 \(n\),表示班上人数。

接下来 \(n\) 行,每行一个字符串表示其名字(互不相同,且只含小写字母,长度不超过 \(50\))。

\(n+2\) 行一个整数 \(m\),表示教练报的名字个数。

接下来 \(m\) 行,每行一个字符串表示教练报的名字(只含小写字母,且长度不超过 \(50\))。

【输出】

对于每个教练报的名字,输出一行。

如果该名字正确且是第一次出现,输出 OK,如果该名字错误,输出 WRONG,如果该名字正确但不是第一次出现,输出 REPEAT

【输入样例】

5  
a
b
c
ad
acd
3
a
a
e

【输出样例】

OK
REPEAT
WRONG

【算法标签】

《洛谷 P2580 于是他错误的点名开始了》 #字符串# #搜索# #字典树,Trie#

【代码详解】

#include <bits/stdc++.h>
using namespace std;// 字典树节点结构体
struct node 
{char c;                     // 当前节点存储的字符map<char, int> child;       // 子节点映射(字符->索引)bool end = 0;               // 标记是否为单词结尾bool repeat = 0;            // 标记是否重复出现过
} root;                         // 字典树根节点vector<node> trie;              // 字典树存储结构
int n, m;                       // n: 初始字符串数量, m: 查询字符串数量
string s;                        // 临时存储输入的字符串/*** 构建字典树* @param s 要插入的字符串*/
void build(string s)
{int fa = 0;                 // 当前父节点索引(从根节点0开始)node x;                     // 新节点临时变量for (int i = 0; i < s.size(); i++) {// 如果当前字符不存在于子节点中if (!trie[fa].child[s[i]]) {int len = trie.size();          // 获取新节点位置trie[fa].child[s[i]] = len;     // 添加子节点映射x.c = s[i];                     // 设置节点字符// 如果是字符串最后一个字符,标记为单词结尾if (i == s.size() - 1) {x.end = 1;}trie.push_back(x);              // 添加新节点fa = len;                       // 移动到新节点} else {// 字符已存在,移动到对应子节点fa = trie[fa].child[s[i]];}}
}/*** 在字典树中查询字符串* @param s 要查询的字符串* @return 查询结果:0(不存在), 1(首次出现), 2(重复出现)*/
int triefind(string s)
{int fa = 0;                 // 从根节点开始查询for (int i = 0; i < s.size(); i++) {// 如果字符不存在于字典树中if (!trie[fa].child[s[i]]) {return 0;           // 返回不存在}else {// 移动到子节点继续查询fa = trie[fa].child[s[i]];}}   // 检查是否为完整单词if (trie[fa].end) {if (trie[fa].repeat)    // 如果已经出现过{return 2;           // 返回重复出现}else {trie[fa].repeat = 1; // 标记为已出现return 1;            // 返回首次出现}} else {return 0;               // 不是完整单词}
}int main()
{// 输入初始字符串数量并构建字典树cin >> n;trie.push_back(root);        // 初始化字典树根节点for (int i = 0; i < n; i++) {cin >> s;build(s);                // 构建字典树}// 处理查询请求cin >> m;for (int i = 0; i < m; i++) {cin >> s;int x = triefind(s);     // 查询字符串// 输出查询结果if (x == 1) {cout << "OK" << endl;}else if (x == 2) {cout << "REPEAT" << endl;}else {cout << "WRONG" << endl;}}return 0;
}

【运行结果】

5  
a
b
c
ad
acd
3
a
OK
a
REPEAT
e
WRONG
http://www.jsqmd.com/news/394354/

相关文章:

  • 冷藏车车门状态检测,识别车门是否关严,输出异常提醒。
  • 2026年环氧树脂绝缘材料厂家推荐:扬州市红杉绝缘科技,FR4/SMC绝缘板等全系产品供应 - 品牌推荐官
  • 新手也能上手,AI论文软件千笔写作工具 VS 锐智 AI,MBA写论文更省心!
  • FPGA开发工具链搭建
  • STM32开发工具链搭建-RT-Thread
  • 2026旋转闪蒸干燥机专业推荐:常州市范氏干燥设备有限公司,全系机型覆盖多行业需求 - 品牌推荐官
  • 2026安徽短视频推广代运营服务推荐:安徽佳速科技全系解决方案,助力企业精准获客 - 品牌推荐官
  • 题解:洛谷 P3375 【模板】KMP
  • Nacos2.x 事件驱动架构:原理与实战 - 实践
  • DeepSeek总结的DuckDB爬虫(crawler)扩展
  • 2026年标牌生产厂家实力推荐:智工标牌有限公司,全品类标牌一站式供应 - 品牌推荐官
  • 使用Hexo搭建个人博客
  • 2026年探伤仪设备推荐:苏州德斯森电子法兰盘/进口/钢板/锅炉探伤仪全系解决方案 - 品牌推荐官
  • 基于改进A*算法的单agv路径规划算法仿真 可以更改地图,起始点,目标点 % 1 表示障碍物 ...
  • 2026年知名的汽车衡地磅,电子地磅厂家选型参考手册 - 品牌鉴赏师
  • 2026年百度广告推广开户竞价代运营公司/服务商测评榜单:深圳昊客网络 专业化引领 - 深圳昊客网络
  • 题解:洛谷 P1816 忠诚
  • ESP32开发工具链搭建-Blinker物联网开发
  • 演唱会利器
  • JavaScript闭包完全指南:从作用域链到实际应用
  • 走失儿童信息寻人平台PHP
  • 题解:洛谷 P1226 【模板】快速幂
  • 前端工程化实战:从零搭建一个企业级Monorepo项目
  • PHP抑郁症焦虑自测与交流平台
  • PHP英语课程学习资源分享博客
  • 题解:洛谷 P1966 [NOIP 2013 提高组] 火柴排队
  • 如何速成RAG+Agent框架大模型应用搭建?看完这一篇你就会了!!!
  • React Hooks进阶:从入门到精通,彻底掌握useEffect的完整指南
  • 2026年百度搜索广告推广开户竞价代运营公司/服务商测评榜单:这5家值得重点关注! - 深圳昊客网络
  • 2026-02-18 学习