第三十七题 UVA508 摩尔斯密码 Morse Mismatches

116 篇文章 1 订阅

PDF

题意翻译
输入每个字母的 Morse编码(字母代码表)。对于每个编码,判断它可能是哪个单词。如果有多个单词精确匹配,输出第一个匹配的单词并且后面加上"!";如果 无法精确匹配,可以在编码尾部增加或删除一些字符以后匹配某个单词(增加或删除的字符应尽量少)。如果只能非精确匹配,任选一个可能的匹配单词,后面加上"?"。

感谢@BFD_qt 提供的翻译

输入输出样例
输入 #1复制
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
----.
*
AN
EARTHQUAKE
EAT
GOD
HATH
IM
READY
TO
WHAT
WROTH
*
.–…-- …–…
–.----… .–.-.----…
.–…-- .–.
…-.-.-…–.-…-.–.-.
…-- .-…–…-.–

…–
*
输出 #1复制
WHAT
HATH
GOD
WROTH?
WHAT
AN
EARTHQUAKE
EAT!
READY
TO
EAT!

/*

一看这题 这啥呀 根本懵逼了,然后跑去看题解,还啥玩意模糊暴力!!
两个map   若有读者,自行理会吧 

*/

#include<iostream>
#include<cstdio>
#include<map>
#include<cstring>

using namespace std;

const int INF = 0x3f3f3f;
map<char,string> morse;
map<string,string> dic;

int Judge(string a,string b) {
	if(a == b) return 0;
	if(a.size() > b.size()) swap(a,b);
	if(a == b.substr(0, a.size())) return b.size() - a.size();
	return INF;
}

string solve(const string &s) {
	string ans = "";
	int Min = INF;
	for(map<string,string>:: iterator it = dic.begin(); it != dic.end(); ++it) {
		int d = Judge(s, it->second);
		if(!d && !Min && *ans.rbegin() != '!') { ans += "!"; return ans; }
		else if(d <= Min) ans = it->first;
		Min = min(Min,d);
	}
	if(Min) ans += "?";
	return ans;
}

int main() {
	string s,ch;
	while(cin >> ch && ch != "*") {
		cin >> s;
		morse[ch[0]] = s;
	}
	while(cin >> s && s != "*") {
		for(int i=0; i<s.size(); i++)
			dic[s] += morse[s[i]];
	}
	while(cin >> s && s != "*") 
		cout << solve(s) << endl;
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

七情六欲·

学生党不容易~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值