P,MTHBGWB 水题

    今天遇到一道特别恶心的水题,可能是我水平太low,居然用了好久的时间!不过主要是用在看懂题意上了,英文题目好长,好恶心啊!!题目如下:

Description

Morse code represents characters as variable length sequences of dots and dashes. In practice, characters in a message are delimited by short pauses. The following table shows the Morse code sequences: 
A .- H .... O --- V ...-
B -... I .. P .--. W .--
C -.-. J .--- Q --.- X -..-
D -.. K -.- R .-. Y -.--
E . L .-.. S ... Z --..
F ..-. M -- T -    
G --. N -. U ..-    

Note that four dot-dash combinations are unassigned. For the purposes of this problem we will assign them as follows (these are not the assignments for actual Morse code): 
underscore ..-- period ---.
comma .-.- question mark ----

Thus, the message "ACM_GREATER_NY_REGION" is encoded as: 
.- -.-. -- ..-- --. .-. . .- - . .-. ..-- -. -.-- ..-- .-. . --. .. --- -. 
M.E. Ohaver proposed an encryption scheme based on mutilating Morse code. Her scheme replaces the pauses between letters, necessary because Morse is a variable-length encoding that is not prefix-free, with a string that identifies the number of dots and dashes in each. For example, consider the message ".--.-.--". Without knowing where the pauses should be, this could be "ACM", "ANK", or several other possibilities. If we add length information, however, ".--.-.--242", then the code is unabiguous. 
Ohaver's scheme has three steps, the same for encryption and decryption: 
1. Convert the text to Morse code without pauses but with a string of numbers to indicate code lengths 
2. Reverse the string of numbers 
3. Convert the dots and dashes back into to text using the reversed string of numbers as code lengths 
As an example, consider the encrypted message "AKADTOF_IBOETATUK_IJN". Converting to Morse code with a length string yields ".--.-.--..----..-...--..-...---.-.--..--.-..--...----.232313442431121334242". Reversing the numbers and decoding yields the original message "ACM_GREATER_NY_REGION". 

Input

This problem requires that you implement Ohaver's encoding algorithm. The input will consist of several messages encoded with Ohaver's algorithm. The first line of the input is an integer n that specifies the number of test cases. The following n lines contain one message per line. Each message will use only the twenty-six capital letters, underscores, commas, periods, and question marks. Messages will not exceed 100 characters in length.

Output

For each message in the input, output the line number starting in column one, a colon, a space, and then the decoded message. The output format must be adhered to precisely.

Sample Input

5
AKADTOF_IBOETATUK_IJN
PUEL
QEWOISE.EIVCAEFNRXTBELYTGD.
?EJHUT.TSMYGW?EJHOT
DSU.XFNCJEVE.OE_UJDXNO_YHU?VIDWDHPDJIKXZT?E

Sample Output

1: ACM_GREATER_NY_REGION
2: PERL
3: QUOTH_THE_RAVEN,_NEVERMORE.
4: TO_BE_OR_NOT_TO_BE?
5: THE_QUICK_BROWN_FOX_JUMPS_OVER_THE_LAZY_DOG

题目翻译:

给你一个摩斯码对照表,26个字母以及下划线‘_’、逗号','、顿号'.'(英文的一个点)、问号'?'分别对应上面和下面表格的摩斯码,输入只会包含大写字母与后面四个符号,输入给你一个测试数据数n,然后是n组数据,每组一行由英文字母和下划线、逗号

、问号、顿号组成的字符串,要你翻译出加密后的内容,其中,翻译过程如下:

第一步:加密,也就是将字母翻译成摩斯密码,然后每个字母记录其对应的摩斯码的长度;

第二步:反转数字串:

第三步:解码,将摩斯码与数字串结合起来对应摩斯码的表格翻译出转换后的字符串即可。

例如:输入:

1

AKADTOF_IBOETATUK_IJN

第一步:加密-->.--.-.--..----..-...--..-...---.-.--..--.-..--...----.232313442431121334242

第二步:反转数字串-->242433121134244313232

第三步:解码翻译成转换后的字符串--> ACM_GREATER_NY_REGION

Ok啦!!

下面是我写了半天的代码,以及别人写的代码,感觉其实差不太多,一并附上:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include <cstdio>// P,MTHBGWB
#include <iostream>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <string>
#include <vector>
#define INF 0x7fffffff
#define FIN 0x80000000
using namespace std;
const char letter[32] = {
   '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','_',',','.','?'
                        };

const char *code[]= {
   ".-","-...","-.-.","-..",".","..-.","--.",
                     "....","..",".---","-.-",".-..","--","-.",
                     "---",".--.","--.-",".-.","...","-","..-",
                     "...-",
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值