#P16571. [Euc2025]Morse Code
[Euc2025]Morse Code
题目描述
摩尔斯电码是一种经典的远距离通信方式,但它也存在会增加长消息传输时间的缺点。
在摩尔斯电码中,字母表中的每个字符都会被分配一个由点号 . 和划线 - 组成的编码,并且任意一个编码都不能是另一个编码的前缀。传输一个字符串时,依次发送其中每个字符对应的编码。
发送一个划线所需的时间是发送一个点号所需时间的两倍。因此,可以认为:
- 点号
.的传输时间为 ; - 划线
-的传输时间为 。
你的字母表中有 个字符,第 个字符在语言中出现的频率为 。
你需要为每个字符设计一个摩尔斯编码,使单个字符的期望传输时间最小。换言之,需要最小化:
其中 是第 个字符对应编码的传输时间。
输入格式
第一行包含一个整数 :
第二行包含 个实数 ,其中:
所有频率均恰好保留四位小数,并且:
输出格式
输出 行,每行包含一个仅由 . 和 - 组成的非空字符串。
第 行表示分配给第 个字符的编码。
所有编码必须满足任意一个编码都不是另一个编码的前缀,并且总期望传输时间必须达到最小值。
如果存在多组最优方案,输出任意一组即可。
样例 1
输入
3
0.3000 0.6000 0.1000
输出
-.
.
--
样例 1 说明
设三个字符分别为 ,出现频率依次为 。
样例方案为:
-
-.; -
.; -
--。
其期望传输时间为:
并且这是最优值。
例如,方案 ..、 -、 .- 的期望传输时间为 。而方案 -、 .、 .. 虽然期望传输时间更小,但不合法,因为 . 是 .. 的前缀。
样例 2
输入
3
0.3000 0.4500 0.2500
输出
..
-
.-