#P16571. [Euc2025]Morse Code

[Euc2025]Morse Code

题目描述

摩尔斯电码是一种经典的远距离通信方式,但它也存在会增加长消息传输时间的缺点。

在摩尔斯电码中,字母表中的每个字符都会被分配一个由点号 . 和划线 - 组成的编码,并且任意一个编码都不能是另一个编码的前缀。传输一个字符串时,依次发送其中每个字符对应的编码。

发送一个划线所需的时间是发送一个点号所需时间的两倍。因此,可以认为:

  • 点号 . 的传输时间为 11
  • 划线 - 的传输时间为 22

你的字母表中有 nn 个字符,第 ii 个字符在语言中出现的频率为 fif_i

你需要为每个字符设计一个摩尔斯编码,使单个字符的期望传输时间最小。换言之,需要最小化:

f1t1+f2t2++fntn,f_1t_1+f_2t_2+\cdots+f_nt_n,

其中 tit_i 是第 ii 个字符对应编码的传输时间。

输入格式

第一行包含一个整数 nn

2n200.2\le n\le 200.

第二行包含 nn 个实数 f1,f2,,fnf_1,f_2,\ldots,f_n,其中:

0<fi<1.0<f_i<1.

所有频率均恰好保留四位小数,并且:

f1+f2++fn=1.f_1+f_2+\cdots+f_n=1.

输出格式

输出 nn 行,每行包含一个仅由 .- 组成的非空字符串。

ii 行表示分配给第 ii 个字符的编码。

所有编码必须满足任意一个编码都不是另一个编码的前缀,并且总期望传输时间必须达到最小值。

如果存在多组最优方案,输出任意一组即可。

样例 1

输入

3
0.3000 0.6000 0.1000

输出

-.
.
--

样例 1 说明

设三个字符分别为 a,b,ca,b,c,出现频率依次为 0.3,0.6,0.10.3,0.6,0.1

样例方案为:

  • aa\to -.
  • bb\to .
  • cc\to --

其期望传输时间为:

0.3×3+0.6×1+0.1×4=1.9,0.3\times 3+0.6\times 1+0.1\times 4=1.9,

并且这是最优值。

例如,方案 aa\to ..bb\to -cc\to .- 的期望传输时间为 2.12.1。而方案 aa\to -bb\to .cc\to .. 虽然期望传输时间更小,但不合法,因为 ... 的前缀。

样例 2

输入

3
0.3000 0.4500 0.2500

输出

..
-
.-