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

UVa 454 Anagrams

题目描述

题目要求找出给定短语列表中的所有互为变位词(anagram\texttt{anagram}anagram)的短语对。变位词忽略空格,仅考虑字母的重排。输出时每对短语按字典序排列,且短语对之间也按字典序排序。

输入格式

第一行一个整数NNN,表示测试用例的数量,后面跟一个空行。每个测试用例包含若干行(最多100100100行),每行一个短语(可能包含空格)。输入以空行结束。两个连续测试用例之间由一个空行分隔。

输出格式

对于每个测试用例,输出所有变位词对,每行格式为phrase1 = phrase2,其中phrase1phrase2按字典序排列,且所有输出行也按字典序排列。若没有变位词对,则不输出任何行。两个连续测试用例的输出之间由一个空行分隔。

样例

输入

1 carthorse horse horse cart i do not know u ok i now donut orchestra

输出

carthorse = horse cart carthorse = orchestra horse cart = orchestra i do not know u = ok i now donut

题目分析

本题的核心是判断两个短语是否为变位词。变位词的定义是:忽略空格后,两个短语包含相同的字母,且每个字母出现的次数相同。

标准化表示

为了便于比较,可以将每个短语转换为一个标准化的字符串:

  1. 去除所有空格。
  2. 将剩余字符按字母顺序排序。
  3. 排序后的字符串作为该短语的“签名”。

若两个短语的签名相同,则它们互为变位词。

算法步骤

  1. 读取所有短语,存储原始字符串。
  2. 对于每个短语,生成其签名(去空格后排序)。
  3. 将所有短语按原始字符串字典序排序。
  4. 枚举所有短语对(i,j)(i, j)(i,j)i<ji < ji<j),若签名相同,则输出words[i] = words[j]
  5. 由于原始字符串已排序,且i<ji < ji<j,输出自然满足字典序要求。

注意点

  • 输入中的空行表示测试用例结束,需要正确处理。
  • 短语可能包含多个空格,需要全部去除。
  • 输出时两个短语之间用=分隔(空格-等号-空格)。

复杂度分析

设短语数量为MMMM≤100M \le 100M100),每个短语长度不超过若干字符。排序复杂度O(Mlog⁡M)O(M \log M)O(MlogM),枚举对O(M2)O(M^2)O(M2),完全可接受。

代码实现

// Anagrams// UVa ID: 454// Verdict: Accepted// Submission Date: 2016-07-17// UVa Run Time: 0.000s//// 版权所有(C)2016,邱秋。metaphysis # yeah dot net#include<bits/stdc++.h>usingnamespacestd;intmain(intargc,char*argv[]){cin.tie(0);cout.tie(0);ios::sync_with_stdio(false);string line;getline(cin,line);intcases=stoi(line);getline(cin,line);for(inti=1;i<=cases;i++){if(i>1)cout<<endl;vector<string>words;map<string,string>sorted;while(getline(cin,line),line.length()>0){words.push_back(line);for(inti=line.length()-1;i>=0;i--)if(isblank(line[i]))line.erase(line.begin()+i);sort(line.begin(),line.end());sorted[words.back()]=line;}sort(words.begin(),words.end());for(inti=0;i<words.size();i++)for(intj=i+1;j<words.size();j++)if(sorted[words[i]]==sorted[words[j]])cout<<words[i]<<" = "<<words[j]<<'\n';}return0;}
http://www.gsyq.cn/news/1507611.html

相关文章:

  • 2026年重庆家装市场深度解析:十大靠谱装修公司评选及消费指南 - 互联网科技品牌测评
  • 大模型底层原理:MoE 混合专家架构的推理优化与工程实践
  • Windows 11系统优化完整教程:用Win11Debloat打造纯净高效体验
  • 3分钟极速上手!LLM Universe模型下载神器全攻略 [特殊字符]
  • 深入机箱与线缆:单点、多点接地在EMC整改中的‘隐身’实战(以某工控设备为例)
  • 从星巴克排队到云服务器扩容:聊聊M/M/1模型里那个关键的ρ(rho)到底是什么意思?
  • 从一行代码看Python设计哲学:lambda匿名函数的前世今生与最佳实践
  • Pearcleaner:让你的Mac告别“数字幽灵“,重获纯净空间
  • 2026年成都喷砂机生产厂家实力测评:这些企业值得关注! - 优质品牌商家
  • 别再只盯着MQTT了!聊聊物联网里那个更省电的CoAP协议,附Wireshark抓包实战
  • Redis 从入门到精通:事务与 Lua 脚本
  • 2026年成都外墙渗水维修市场深度分析:谁在提供真正可靠的服务? - 优质品牌商家
  • 【Springboot毕设全套源码+文档】springboot基于区块链的电子病历数据共享平台设计与实现(丰富项目+远程调试+讲解+定制)
  • 港科大EMBA全球排名多少?2026权威榜单完整解析
  • GEO监测工具怎么选?B2B企业要看真实网页模拟能力
  • 2026年中广州刑事诉讼律师市场趋势与精英服务商深度解析 - 品牌鉴赏官2026
  • 语言AI技术课程:从词向量到Transformer架构解析
  • 精密机械生产成本核算专员简历高分撰写指南
  • 对抗样本攻防实战:用PGD算法在PyTorch中生成和防御FGSM攻击
  • Java计算机毕设之基于SpringBoot的养老中心管理系统的设计与实现基于 SpringBoot 的智慧养老中心综合管理系统(完整前后端代码+说明文档+LW,调试定制等)
  • 从计算器到代码:用C++实现任意数立方根的‘傻瓜式’二分搜索算法(循环100次就够)
  • Claude Sonnet 4.6 97.53 分领跑,材料约束把文心一言拉开 40 分
  • 从‘角色扮演’到‘对抗测试’:用Midjourney和ChatGPT搞创作的进阶玩法
  • 深入高通ABL/XBL:像理解JNI一样理解UEFI Protocol通信机制
  • Blender3mfFormat:高效实现3D打印工作流的完整解决方案
  • XR技术在社交机器人研究中的创新应用与挑战
  • 【Springboot毕设全套源码+文档】基于springboot大学健身场所管理系统设计与开发(丰富项目+远程调试+讲解+定制)
  • 手机浏览器里直接手写批注PDF:Canvas绘图+PDF.js渲染,开箱即用
  • OpenFOAM twoPhaseEulerFoam求解器实战:从双流体模型到代码实现,手把手教你搞定气液两相流模拟
  • 极客与商业思维的融合实践(1)