UVa 698 Index
题目描述给定一个索引词列表和若干行文本需要为每个在文本中出现的索引词生成索引条目内容包括该词出现的行号。行号从111开始编号。若一个词在连续多行出现则合并为范围如3-4。若同一词在词典中出现多次重复的索引词则输出同样多次。索引词由字母和数字组成长度不超过101010大小写不敏感输出时统一大写。每行文本中单词由非字母数字字符分隔。输入格式多个测试用例。每个测试用例以若干行索引词开始每行一个词以空行结束。然后若干行文本以空行结束。整个输入以另一个空行结束即最后一个测试用例后的空行。输出格式对于每个测试用例输出Case X:其中XXX为用例编号从111开始。然后对于每个在文本中出现的索引词若词典中有多个相同词则输出多次输出该词输出格式为词 行号列表每个行号列表用逗号和空格分隔连续行合并为范围。最后在每个用例后输出一个空行。样例输入empty character of for it An empty line has no characters in it at all (except for the end of line character). No word will have more than ten characters in it. The end of the cases will be followed by another empty line. It follows the empty line ending the text of the last case. Repeat A line A repeat of a word on a line does not result in a repeat of the line number in the index.输出Case 1 CHARACTER 2 EMPTY 1, 4 FOR 1 IT 1, 3-4 OF 2-3, 5 Case 2 A 1 LINE 1-2 REPEAT 1题目分析本题要求对文本中的单词进行索引。关键步骤读入索引词列表转为大写存入mapstring, int记录每个词在词典中出现的次数用于重复输出以及mapstring, vectorpairint,int存储每个词出现的行号区间。逐行读入文本对每行提取所有由字母和数字组成的单词忽略其他字符转为大写。若该词在词典中则记录行号若该行号与前一个记录的行号连续则扩展当前区间否则新建区间。输出时按字典序排序因此我们采用map自然排序字典序。解题思路读入索引词列表存入mapstring, int counter记录出现次数和mapstring, vectorpairint,int indexing记录行号区间。逐行读入文本对每行遍历字符提取单词字母或数字转为大写若在indexing中存在则记录行号。记录行号时若该词已有一个区间且当前行号等于区间末尾1 11则扩展区间否则新建区间。输出按indexing的键顺序字典序对每个词若其区间列表非空则输出该词和行号区间列表用逗号和空格分隔连续区间合并为a-b。若counter[word] 1则输出多次。复杂度分析设文本行数为RRR每行单词数WWW索引词数TTT。总复杂度O(R⋅W⋅log⁡T)O(R \cdot W \cdot \log T)O(R⋅W⋅logT)。代码实现// Index// UVa ID: 698// Verdict: Accepted// Submission Date: 2017-06-22// UVa Run Time: 0.040s//// 版权所有C2017邱秋。metaphysis # yeah dot net#includebits/stdc.husingnamespacestd;intmain(){cin.tie(0),cout.tie(0),ios::sync_with_stdio(false);mapstring,intcounter;mapstring,vectorpairint,intindexing;string line,word;intcases0;while(getline(cin,word)){counter.clear();indexing.clear();do{for(inti0;iword.length();i)word[i]toupper(word[i]);counter[word];if(counter[word]1)continue;indexing.insert(make_pair(word,vectorpairint,int()));}while(getline(cin,word),word.length()0);intlineNumbers1;while(getline(cin,line),line.length()0){intidx0;while(idxline.length()){if(isalpha(line[idx])||isdigit(line[idx])){string block;while(idxline.length()){if(isalpha(line[idx])||isdigit(line[idx]))blocktoupper(line[idx]);elsebreak;idx1;}if(indexing.find(block)!indexing.end()){if(indexing[block].size()0){indexing[block].push_back(make_pair(lineNumbers,lineNumbers));}else{if(lineNumbers!indexing[block].back().second){if(indexing[block].back().second1lineNumbers)indexing[block].back().second1;elseindexing[block].push_back(make_pair(lineNumbers,lineNumbers));}}}}elseidx1;}lineNumbers1;}coutCase cases\n;for(autoentry:indexing){if(entry.second.size()0)continue;for(inti0;icounter[entry.first];i){coutentry.first;boolfirsttrue;for(autop:entry.second){if(first)firstfalse;elsecout,;cout ;if(p.firstp.second)coutp.first;elsecoutp.first-p.second;}cout\n;}}cout\n;}return0;}总结本题通过扫描文本提取单词并利用区间合并技术记录行号范围最后按字典序输出索引。关键点包括正确提取单词字母数字序列。大小写不敏感统一转为大写。重复索引词需要输出多次。连续行号合并为范围。该解法是文本索引的经典实现适合作为字符串处理和映射容器的练习。

相关新闻

基于Qt/C++实现稳定可靠的文件双向传输:从协议设计到断点续传

基于Qt/C++实现稳定可靠的文件双向传输:从协议设计到断点续传

1. 项目概述与核心价值最近在做一个需要跨设备同步数据的桌面应用,核心需求之一就是实现稳定可靠的文件双向传输。简单来说,就是客户端能上传文件到服务端,也能从服务端下载指定的文件。听起来像是FTP的简化版,但用Qt/C自己撸一套…

2026/10/18 1:30:16 阅读更多 →
VC++中BMP转PNG:GDI+实现透明背景图像格式转换

VC++中BMP转PNG:GDI+实现透明背景图像格式转换

1. 项目概述:从BMP到PNG,VC中的图像格式跨越在Windows桌面应用开发,尤其是那些涉及图形界面、图像处理或者游戏开发的场景里,我们经常会遇到一个经典问题:如何让程序里的图标、贴图或者UI元素拥有漂亮的透明背景&#…

2026/10/19 17:07:43 阅读更多 →
M5 Mac Mini深度解析:芯片迭代、定价策略与适用场景

M5 Mac Mini深度解析:芯片迭代、定价策略与适用场景

最近在关注苹果产品更新的朋友可能都注意到了,关于 M5 Mac Mini 的消息开始在网上流传。有爆料称这款产品将推迟到秋季发布,起步价直接定在 899 美元,配置也会全面升级。作为一个长期关注苹果生态的技术博主,我觉得有必要从产品迭…

2026/10/19 20:13:04 阅读更多 →

最新新闻

SELinux文件系统标签管理与审计日志联调排查实战指南

SELinux文件系统标签管理与审计日志联调排查实战指南

干了这么多年Linux运维,我见过太多人碰到SELinux就是一套组合拳:先setenforce 0,再改/etc/selinux/config,直接把安全机制摁死。这路子确实省事,但要是服务器被日穿了,连个审计线索都捞不着,那时…

2026/10/19 22:06:39 阅读更多 →
Android国密SM2/SM3/SM4轻量级生产级封装工具包

Android国密SM2/SM3/SM4轻量级生产级封装工具包

简介:本资源是一套面向Android开发者的国密算法实战封装库,聚焦SM2非对称加密、SM3密码杂凑与SM4对称分组加密三大核心算法,解决国产密码在移动端集成难、兼容性差、调用接口不统一等实际问题,适用于金融类App、政务平台、物联网终…

2026/10/19 22:06:39 阅读更多 →
diagram-design:从草图到系统,图表设计规范与工程实践

diagram-design:从草图到系统,图表设计规范与工程实践

1. 从一张草图到一套系统:diagram-design 到底在解决什么问题第一次听到“diagram-design”这个词,很多人会下意识觉得它只是“画图”的另一种说法。但真正在项目里被图表折磨过的人都知道,画一张图不难,难的是让这张图在三个月后…

2026/10/19 22:06:39 阅读更多 →
美赛B题O奖论文拆解:概率搜索模型与路径规划实战

美赛B题O奖论文拆解:概率搜索模型与路径规划实战

去年美赛B题一出,圈子里都在讨论那篇O奖论文。英文原题翻译成中文,核心是四个字:失联寻回。那篇O奖论文的标题如果直译,大概就是《从失联到寻回:某片海域的搜寻之旅》。我刻意不提具体海域名,因为做案例分析…

2026/10/19 22:05:38 阅读更多 →
多测站GNSS精密定位:Kriging插值与卡尔曼滤波实现网络RTK

多测站GNSS精密定位:Kriging插值与卡尔曼滤波实现网络RTK

很多人第一次看到“多测站 GNSS 精密定位 Kriging 卡尔曼滤波”这条链路时,第一反应都是:有必要这么复杂吗?单站差分、PPK、PPP不也能定位吗。我之前做某测试场的动态定位精度评估时也这么想,直到某次基准站距离用户站超过30km&…

2026/10/19 22:05:38 阅读更多 →
IM系统用户管理子服务架构设计与踩坑实践:从表结构到缓存策略

IM系统用户管理子服务架构设计与踩坑实践:从表结构到缓存策略

做IM系统,用户管理子服务往往是看起来最简单、坑却最多的那一块。很多人一开始会觉得,无非就是注册、登录、改个昵称、拉个好友列表,有什么好写的?但真正上手做才发现,一个IM系统里最基础的用户服务,牵扯到…

2026/10/19 22:03:35 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/19 10:02:04 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →