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

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

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

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

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

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

2026/7/18 4:49:38 阅读更多 →

最新新闻

基于ROS2与YOLOv8的桌面清洁机器人:从视觉感知到运动规划全流程实践

基于ROS2与YOLOv8的桌面清洁机器人:从视觉感知到运动规划全流程实践

1. 项目概述:从零打造一个会自己收拾桌面的AI机器人最近在工作室里,看着桌面上永远理不清的线材、工具和喝了一半的咖啡杯,我就在想,要是能有个小助手帮我自动整理就好了。这个念头催生了今天要分享的项目:一个基于SOA…

2026/7/18 5:38:04 阅读更多 →
CAN总线在嵌入式系统中的核心技术与应用实践

CAN总线在嵌入式系统中的核心技术与应用实践

1. CAN接口在嵌入式系统中的核心地位第一次接触CAN总线时,我被它的两根双绞线震惊了——就这么简单的物理结构,竟能支撑起整个汽车电子系统的通信?后来在工业现场看到CAN总线在强电磁干扰环境下稳定传输数据,才真正理解它的价值所…

2026/7/18 5:38:04 阅读更多 →
HarmonyOS7 智感握姿完整复盘:从权限到跟手 UI 的避坑清单

HarmonyOS7 智感握姿完整复盘:从权限到跟手 UI 的避坑清单

文章目录最终效果再看一次一条主链路串起来最小可复现代码骨架最容易踩的 6 个坑哪些代码最值得二次复用小白学习路线建议写在最后前面十四篇把项目拆得比较细了,这篇做一次收口。如果你只想快速复现智感握姿,这篇可以当检查清单用。 项目源码&#xff…

2026/7/18 5:38:04 阅读更多 →
特征变换与缩放:决定模型效果的关键校准工序

特征变换与缩放:决定模型效果的关键校准工序

1. 这不是“调参”,而是数据工程的临门一脚:为什么特征变换与缩放决定模型成败你训练了一个XGBoost模型,特征工程只做了缺失值填充和one-hot编码,AUC跑到了0.82;隔壁同事用同样的数据、同样的算法,却稳定在…

2026/7/18 5:38:04 阅读更多 →
Go语言加密实战:AES与RSA核心原理、避坑指南与混合加密系统构建

Go语言加密实战:AES与RSA核心原理、避坑指南与混合加密系统构建

1. 项目概述:为什么要在Go里搞加密?做后端开发,尤其是涉及到用户数据、支付、通信这些敏感环节,加密是绕不过去的一道坎。你可能经常听到AES和RSA这两个词,前者速度快,适合加密大量数据;后者基于…

2026/7/18 5:38:04 阅读更多 →
MediaCrawler:社交媒体数据采集的智能解决方案

MediaCrawler:社交媒体数据采集的智能解决方案

MediaCrawler:社交媒体数据采集的智能解决方案 【免费下载链接】MediaCrawler-new 项目地址: https://gitcode.com/GitHub_Trending/me/MediaCrawler-new 在当今数字化时代,社交媒体数据已成为市场分析、内容研究和学术探索的宝贵资源。MediaCra…

2026/7/18 5:37:04 阅读更多 →

日新闻

从模糊意图到可执行指令:Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则

从模糊意图到可执行指令:Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则

更多请点击: https://kaifayun.com 第一章:从模糊意图到可执行指令:Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则 在Claude驱动的产品需求文档(PRD)生成实践中,原始业务意图往往以自然语言片…

2026/7/18 0:00:38 阅读更多 →
Cursor配置生成失效?3大隐藏陷阱+4行修复代码,资深工程师连夜整理的紧急补救清单

Cursor配置生成失效?3大隐藏陷阱+4行修复代码,资深工程师连夜整理的紧急补救清单

更多请点击: https://codechina.net 第一章:Cursor配置生成失效?3大隐藏陷阱4行修复代码,资深工程师连夜整理的紧急补救清单 Cursor 配置生成突然失效,是近期高频报障场景。表面看是 cursor.config.json 未更新或 LSP…

2026/7/18 0:00:38 阅读更多 →
某智驾大牛创业

某智驾大牛创业

作者:钟声编辑:Mark出品:红色星际头图:智能驾驶图片据悉,国内某头部智驾公司端到端模型技术大牛Z投身创业,并且已经拿到融资。Z不仅是该头部公司内部最年轻的对标阿里P10级别技术负责⼈,更是业内…

2026/7/18 0:00:38 阅读更多 →

周新闻

月新闻