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

UVa 508 Morse Mismatches

题目描述

题目要求根据给定的摩尔斯电码表和一个单词词典,对每个输入的摩尔斯电码串进行匹配。匹配规则如下:

  • 若只有一个单词的摩尔斯电码与输入完全相同,则输出该单词。
  • 若有多个单词的摩尔斯电码完全相同,则输出其中长度最短的单词(若仍有多个,任选一个),并在其后加!
  • 若无完全匹配,则找出匹配最长公共前缀的单词(即前缀长度等于输入长度或单词长度中的较小值),并选择长度差异最小的单词(即∣len_morse−len_word∣|len\_morse - len\_word|len_morselen_word最小),输出该单词并在其后加?

输入格式

输入包含三部分:

  1. 摩尔斯电码表:每行一个大写字母或数字,后跟一个空格或多个空格,再跟其摩尔斯电码(.-,长度不超过666)。以单独一行*结束。
  2. 词典:每行一个单词(大写字母和数字,长度不超过101010),最多100100100个。以单独一行*结束。
  3. 摩尔斯电码串:每行一个摩尔斯电码串(由.-组成,长度不超过808080),以单独一行*结束。

输出格式

对于每个摩尔斯电码串,输出一行对应的匹配单词(可能带!?后缀)。

样例

输入

A .- B -... C -.-. D -.. E . F ..-. G --. H .... I .. J .--- K -.- L .-.. M -- N -. O --- P .--. Q --.- R .-. S ... T - U ..- V ...- W .-- X -..- Y -.-- Z --.. 0 ----- 1 .---- 2 ..--- 3 ...-- 4 ....- 5 ..... 6 -.... 7 --... 8 ---.. 9 ----. * A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 * . . . - . . . - . . . - . . . - . . . - . . . - . . . - . . . - . . . - . . . - . . . - *

输出

SOS

题目分析

本题的核心是字符串匹配,需要处理完全匹配和最长公共前缀匹配两种情况。

预处理

  • 读取摩尔斯电码表,建立字符到摩尔斯电码的映射。
  • 读取词典,将每个单词转换为摩尔斯电码串,存储单词和对应的摩尔斯电码。

匹配逻辑

对于每个输入的摩尔斯电码串mmm

  1. 遍历所有词典单词,计算mmm与单词摩尔斯电码的匹配长度(逐字符比较直到不匹配或任一结束)。
  2. 若匹配长度等于两者长度,则完全匹配,加入候选列表。
  3. 若不完全匹配,则计算长度差异,记录差异最小的单词。

完全匹配优先:

  • 若完全匹配候选数为111,输出该单词。
  • 若完全匹配候选数>1>1>1,选择其中最短的单词(若长度相同任选),输出并加!
  • 若无完全匹配,输出长度差异最小的单词并加?

复杂度分析

词典大小≤100\le 100100,每个摩尔斯电码串长度≤80\le 8080,每次匹配O(80)O(80)O(80),总复杂度可接受。

代码实现

// Morse Mismatches// UVa ID: 508// Verdict: Accepted// Submission Date: 2017-04-25// UVa Run Time: 0.000s//// 版权所有(C)2017,邱秋。metaphysis # yeah dot net#include<bits/stdc++.h>usingnamespacestd;intmain(intargc,char*argv[]){cin.tie(0),cout.tie(0),ios::sync_with_stdio(false);map<char,string>table;vector<string>word,context;charletter;string field;while(cin>>letter,letter!='*'){cin>>field;table[letter]=field;}while(cin>>field,field!="*"){string code;for(autoc:field)code+=table[c];word.push_back(field);context.push_back(code);}while(cin>>field,field!="*"){vector<string>perfectly;string flawed=word.front();intminDiff=102400;for(inti=0;i<word.size();i++){size_t matched=0;for(size_t j=0;j<field.size()&&j<context[i].size();j++){if(field[j]!=context[i][j])break;matched++;}if(matched==field.size()&&matched==context[i].size())perfectly.push_back(word[i]);else{if(matched==min(context[i].size(),field.size())){intdiff=abs((int)context[i].size()-(int)field.size());if(diff<minDiff){minDiff=diff;flawed=word[i];}}}}if(perfectly.size()==1)cout<<perfectly.front()<<'\n';else{if(perfectly.size()>1)cout<<perfectly.front()<<"!\n";elsecout<<flawed<<"?\n";}}return0;}
http://www.jsqmd.com/news/1023702/

相关文章:

  • 北京2026奢侈品手表包包回收防骗指南:跑了5家店总结出的真实报价经验 - 谊识预商务
  • 团队AI编程工具选型:为什么规范即代码才是协作核心
  • Simuro足球仿真平台:多智能体协同与强化学习实战指南
  • 2026济南金价暴涨!5家老牌黄金回收店实测对比,正规变现赚满差价 - 奢侈品回收评测
  • 如何快速清理重复图片:imagedups 图片查重工具完整指南
  • 极限竞速地平线4/5全能修改器:免费开源的游戏体验革新方案
  • Claude Cowork:macOS桌面AI代理实现文件自动化执行
  • 2026重庆百达翡丽回收榜单:收的顶榜首,高端腕表变现攻略 - 奢侈品回收测评
  • 2026年国产替代红外热像仪品牌深度排行与技术选型指南
  • ROFLPlayer:英雄联盟回放文件的智能解析与版本兼容解决方案
  • 合肥市奢侈品手表包包回收回收门店权威测评:综合实力最强的五家店铺推荐 - 谊识预商务
  • K2 Thinking:大模型二阶反思能力的工程化实践
  • 2026最新上海工业冷水机厂家品牌推荐,五大标杆厂家推荐+技术参数对比 - 资讯速览
  • Obsidian终极美化指南:20个CSS片段打造个性化知识库
  • 智谱AI GLM-4成本重构:从计费优化到语义价值密度
  • Claude Opus 4.8 动态工作流实战指南:从API调用到Ultracode工程化落地
  • AI时代先抢“答案位”:安徽合肥本地GEO优化公司推荐与全解析 - 资讯报道
  • 傅山这幅行书,为何让你“眼不眠”?
  • 嘉兴市奢侈品手表包包回收价格差距高达15%:实测对比告诉你哪家店报价最实在 - 干豆腐啊
  • 大模型开源与闭源竞争格局
  • synchronized 锁升级的过程
  • 2026年B2B系统选型避坑指南:哪些“伪智能”“假集成”功能要警惕?
  • 2026大模型技术速成:小白也能轻松掌握的面试核心要点(收藏版)
  • 荆门市2026年奢侈品手表包包回收门店权威测评:这五家店铺回收价格最高 - 谊识预商贸
  • 终极指南:使用EPPlus在.NET中实现Excel自动化处理
  • 3步搞定跨平台资源下载:res-downloader一站式解决方案指南
  • 儋州市奢侈品回收门店红黑榜:综合实力最强的五家店铺推荐 - 千叶啊
  • 互信息实战指南:破解非线性特征筛选难题
  • Ubuntu 18.04深度学习驱动安装避坑指南:NVIDIA驱动与CUDA兼容性实战
  • m4s-converter:B站缓存视频永久保存解决方案