news 2026/6/25 5:37:14

UVa 123 Searching Quickly

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
UVa 123 Searching Quickly

一、问题分析

本题要求实现一个KWIC(Key Word In Context)\texttt{KWIC(Key Word In Context)}KWICKey Word In Context索引生成程序。给定一个忽略词列表和一个标题列表,程序需要为每个标题中的每个关键词(即不在忽略词列表中的词)生成一条索引记录,并将所有索引按关键词的字典序排序后输出。

在输出时,关键词需要转换为全大写,标题中其余词则转为全小写。若同一关键词在多条索引中出现,则按这些标题在输入中的原始顺序排列;若同一标题中有多个相同关键词,则按它们在标题中出现的从左到右的顺序依次输出。

关键限制条件

  • 忽略词数量≤50≤ 5050
  • 标题数量≤200≤ 200200
  • 总字符数(忽略词+++标题)≤10000≤ 1000010000
  • 标题中单词数≤15≤ 1515
  • 输入仅包含字母和空格

二、解题思路

1. 数据读取与存储

  • 先读取忽略词,直到遇到分隔符::
  • 将忽略词存入一个set<string>中以便快速查找,注意忽略词可能重复给出,需去重。
  • 然后读取所有标题,对每个标题进行处理。

2. 标题处理

  • 将标题转换为全小写版本,便于后续处理和比较。
  • 遍历标题中的每个单词:
    • 判断其是否在忽略词集合中。
    • 若不是忽略词,则它是一个关键词,需要生成一条索引记录。
  • 生成索引时:
    • 关键词用全大写替换原单词。
    • 记录该关键词在标题中的起始位置(用于同一标题内多个相同关键词的排序)。
    • 记录该标题在输入中的顺序(用于同关键词下不同标题的排序)。
  • 将生成的索引存入一个结构体数组中。

3. 排序规则

需要自定义比较函数,按以下优先级排序:

  1. 关键词字典序(升序)
  2. 若关键词相同,则按标题在输入中的出现顺序排序
  3. 若同一标题中出现多个相同关键词,则按关键词在标题中的从左到右顺序排序

4. 输出

按排序后的顺序逐行输出索引内容即可。


三、算法复杂度分析

  • 设标题数为nnn,每个标题单词数 ≤151515,则总关键词数≤15n≤ 15n15n
  • 排序复杂度为O(mlog⁡m)O(m \log m)O(mlogm),其中mmm为总关键词数,最坏情况m≈3000m ≈ 3000m3000,完全可行。
  • 查找忽略词使用set,每次查找O(log⁡k)O(\log k)O(logk)k≤50k ≤ 50k50,非常快。

四、代码实现

// Searching Quickly// UVa ID: 123// Verdict: Accepted// Submission Date: 2012-01-03// UVa Run Time: 0.056s//// 版权所有(C)2011,邱秋。metaphysis # yeah dot net//// [解题方法]// 简单的字符串处理和排序题。//// 提交时错误了一次,因为没有注意到需要忽略的关键词可能会重复给出的情况,修正后就 AC 了。#include<bits/stdc++.h>usingnamespacestd;structtitle{string content;string keyword;intindexKeyword;intindexInput;};stringtoLower(string s){string r;for(inti=0;i<s.length();i++)r+=(s[i]>='A'&&s[i]<='Z'?(s[i]+32):s[i]);returnr;}stringtoUpper(string s){string r;for(inti=0;i<s.length();i++)r+=(s[i]>='a'&&s[i]<='z'?(s[i]-32):s[i]);returnr;}boolcmp(title a,title b){if(a.keyword==b.keyword){if(toLower(a.content)==toLower(b.content))returna.indexKeyword<b.indexKeyword;elsereturna.indexInput<b.indexInput;}returna.keyword<b.keyword;}intmain(intargc,charconst*argv[]){set<string>ignore;vector<title>titles;string line;while(getline(cin,line)){if(line!="::"){// 可能会给出重复的关键词,需要消除。if(ignore.find(line)==ignore.end())ignore.insert(line);}else{intcount=0;while(getline(cin,line)){string all=toLower(line);inti=0;while(i<line.length()){if(line[i]==' ')i++;else{// 将句子中出现的单词逐个分离出来。intstart=i;string tmp;while(i<line.length()&&line[i]!=' '){tmp+=line[i];i++;}intend=i;// 若不是需要忽略的关键词,则生成一个标题。tmp=toLower(tmp);if(ignore.find(tmp)==ignore.end()){string keyword=toUpper(tmp);string content=all.substr(0,start)+keyword+all.substr(end);title t=(title){content,keyword,start,count};titles.push_back(t);}}}count++;}}}// 按指定规则排序。sort(titles.begin(),titles.end(),cmp);for(inti=0;i<titles.size();i++)cout<<titles[i].content<<endl;return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/18 10:48:45

OpenVINO™ AI插件终极指南:打造智能音频处理工作流

OpenVINO™ AI插件终极指南&#xff1a;打造智能音频处理工作流 【免费下载链接】openvino-plugins-ai-audacity A set of AI-enabled effects, generators, and analyzers for Audacity. 项目地址: https://gitcode.com/gh_mirrors/op/openvino-plugins-ai-audacity 还…

作者头像 李华
网站建设 2026/6/19 10:11:02

BiliBili-UWP第三方客户端:Windows平台上的B站观影新体验

BiliBili-UWP第三方客户端&#xff1a;Windows平台上的B站观影新体验 【免费下载链接】BiliBili-UWP BiliBili的UWP客户端&#xff0c;当然&#xff0c;是第三方的了 项目地址: https://gitcode.com/gh_mirrors/bi/BiliBili-UWP BiliBili-UWP是一款专为Windows 10/11系统…

作者头像 李华
网站建设 2026/6/19 10:13:45

Chartero终极指南:5分钟让Zotero文献管理可视化起飞

Chartero终极指南&#xff1a;5分钟让Zotero文献管理可视化起飞 【免费下载链接】Chartero Chart in Zotero 项目地址: https://gitcode.com/gh_mirrors/ch/Chartero 还在为海量文献头疼&#xff1f;每天面对成堆的PDF文档&#xff0c;却无法直观了解自己的阅读进度和效…

作者头像 李华
网站建设 2026/6/22 15:35:16

开源许可证解读:Z-Image-Turbo可商用吗?

开源许可证解读&#xff1a;Z-Image-Turbo可商用吗&#xff1f; 阿里通义Z-Image-Turbo WebUI图像快速生成模型 二次开发构建by科哥 核心结论先行&#xff1a;Z-Image-Turbo 基于 Apache 2.0 许可证发布&#xff0c;允许商业用途、修改与分发&#xff0c;但需保留原始版权声明…

作者头像 李华
网站建设 2026/6/24 17:23:37

边缘计算实践:轻量级中文识别模型的快速部署

边缘计算实践&#xff1a;轻量级中文识别模型的快速部署 在嵌入式设备上部署中文物体识别功能时&#xff0c;工程师常常面临计算资源有限、内存占用过高和模型准确率难以平衡的挑战。本文将介绍如何利用预置的轻量级中文识别模型镜像&#xff0c;快速在边缘设备上部署高效的物体…

作者头像 李华
网站建设 2026/6/20 3:51:54

智能零售解决方案:30分钟搭建商品识别演示系统

智能零售解决方案&#xff1a;30分钟搭建商品识别演示系统 在零售科技领域&#xff0c;快速搭建商品识别演示系统是销售团队向客户展示自动货架盘点方案的关键。本文将介绍如何利用预置镜像&#xff0c;在30分钟内完成一个商品识别演示系统的搭建&#xff0c;即使你技术资源有限…

作者头像 李华