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/7/23 11:01:56 阅读更多 →
VC++中BMP转PNG:GDI+实现透明背景图像格式转换

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

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

2026/7/23 9:38:46 阅读更多 →
M5 Mac Mini深度解析:芯片迭代、定价策略与适用场景

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

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

2026/7/23 9:27:07 阅读更多 →

最新新闻

在天津挑选专业标书制作机构,这些实用判断技巧很值得大家参考

在天津挑选专业标书制作机构,这些实用判断技巧很值得大家参考

对于天津不少工程服务商、政企供应商、中小微企业经营者来说,投标过程里最可惜的事,莫过于前期攒资质、跑对接、做测算花了几个月功夫,最后因为标书制作的疏漏,要么直接被废标,要么差两三分与项目失之交臂。来自天津公…

2026/7/24 0:54:46 阅读更多 →
400电话多场景架构适配与企业选型实战:从热线接待、中转分流到风控合规落地

400电话多场景架构适配与企业选型实战:从热线接待、中转分流到风控合规落地

标签:#400电话 #企业热线 #语音中继 #呼叫路由 #客服架构 #通信场景化落地阅读对象:后端开发、通信架构师、IT运维、系统集成、企业客服项目交付人员摘要:大部分企业对400电话的认知仅停留在“品牌热线”层面,忽略了其路由架构、并…

2026/7/24 0:53:46 阅读更多 →
面试官:大模型怎么决定 长期记忆是否需要召回?

面试官:大模型怎么决定 长期记忆是否需要召回?

先说结论: 严格来说,并不是大模型单独决定是否召回长期记忆,而是由 Agent Runtime、记忆管理器和大模型共同完成决策。 一、面试时可以这样回答 在一个完整的 AI Agent 系统中,长期记忆是否需要召回,一般不是简单地每…

2026/7/24 0:52:46 阅读更多 →
ADAS1021KCBZ-RL,集成脉冲 / 阻抗检测的 5 通道低电位采集前端

ADAS1021KCBZ-RL,集成脉冲 / 阻抗检测的 5 通道低电位采集前端

型号介绍ADAS1021KCBZ-RL 是一款高度集成的 5 通道模拟前端,它具备直流导联脱落检测与交流电极接触质量检测两套电路。直流检测覆盖全部 ECG 通道与 RLD 参考电极,检测激励电流、输出极性、脱落判定阈值全部可编程;交流阻抗检测用于评估电极与…

2026/7/24 0:51:45 阅读更多 →
基于YOLOv5的动物识别系统设计与优化

基于YOLOv5的动物识别系统设计与优化

1. 项目概述:基于YOLOv5的动物识别系统这个项目使用YOLOv5目标检测算法构建了一个高效的动物识别系统。作为一名长期从事计算机视觉开发的工程师,我发现YOLOv5在实时性和准确性之间取得了很好的平衡,特别适合动物识别这类需要快速响应的场景。…

2026/7/24 0:50:45 阅读更多 →
深度强化学习在混合动力汽车能量管理中的应用与优化

深度强化学习在混合动力汽车能量管理中的应用与优化

1. 混合动力汽车能量管理策略概述 混合动力汽车(HEV)作为传统燃油车向纯电动车过渡的关键技术路线,其核心挑战在于如何高效协调发动机与电动机的能量分配。能量管理策略(EMS)直接决定了整车燃油经济性、排放性能以及动…

2026/7/24 0:50:45 阅读更多 →

日新闻

用Highcharts 创建可拖拽三维散点立方体3D图表

用Highcharts 创建可拖拽三维散点立方体3D图表

该案例基于Highcharts scatter3d 三维散点图实现空间立方体散点可视化,核心特色:三维 X/Y/Z 三轴空间,所有散点分布在 0~10 立方体空间内;散点使用径向渐变实现立体 3D 圆球质感;支持鼠标 / 触屏拖拽画布,…

2026/7/24 0:00:29 阅读更多 →
AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口 AppCertDlls 位于 HKLM\System\CurrentControlSet\Control\Session Manager\AppCertDlls。本文的程序功能是只读列出这个键在 64 位和 32 位注册表视图中的全部值,并显示每条值的来源、名称、类型和可安全显示的数…

2026/7/24 0:00:29 阅读更多 →
我的编程之路:第一篇博客

我的编程之路:第一篇博客

大家好,我是一名编程初学者,同时这也是我编程学习之路上的第一篇博客。在这里,我想要向大家介绍我的一些想法和规划。a.自我介绍我是一个刚刚接触编程的新手,目前在学习c语言,我对编程世界充满了强烈的好奇。当然&…

2026/7/24 0:00:29 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 8:58:19 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 19:43:43 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/23 17:49:47 阅读更多 →

月新闻