CF2068D.Morse Code

NOI/NOI+/CTSC

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

莫尔斯电码是一种经典的远程通信方式,但存在某些缺陷会增加长消息的传输时间。

在莫尔斯电码中,字母表中的每个字符被分配一个由点(.)和划(-)组成的序列,且没有序列是另一个序列的前缀。传输字符串时,各字符对应的序列按顺序发送。划的传输时间是点的两倍。

你的字母表包含 nn 个字符,其中第 ii 个字符在你的语言中出现频率为 fif_i。你的任务是设计一个莫尔斯电码编码方案,为每个字符分配点划序列,以最小化单个字符的期望传输时间。即你需要最小化 f1t1+f2t2+⋯+fntnf_1t_1 + f_2t_2 + \cdots + f_nt_n,其中 tit_i 是传输第 ii 个字符序列所需的时间。

输入格式

第一行包含一个整数 nn(2≤n≤2002 \le n \le 200)——字母表中字符的数量。

第二行包含 nn 个实数 f1,f2,…,fnf_1, f_2, \ldots, f_n(0<fi<10 < f_i < 1)——第 ii 个字符的频率。所有 fif_i 值精确到小数点后四位。所有频率之和严格等于 11。

输出格式

输出 nn 行,每行包含一个由点(.)和划(-)组成的字符串。第 ii 行对应第 ii 个字符的编码序列。

若存在多个具有相同最小期望传输时间的有效编码方案,输出任意一种均可。

输入输出样例

  • 输入#1

    3
    0.3000 0.6000 0.1000

    输出#1

    -.
    .
    --
  • 输入#2

    3
    0.3000 0.4500 0.2500

    输出#2

    ..
    -
    .-

说明/提示

第一个样例中,字母表包含三个字符(例如 aa, bb, cc),频率分别为 0.30.3, 0.60.6, 0.10.1。在最优方案中,aa 对应 -.,bb 对应 .,cc 对应 --。此时期望传输时间为 0.3⋅3+0.6⋅1+0.1⋅4=1.90.3 \cdot 3 + 0.6 \cdot 1 + 0.1 \cdot 4 = 1.9 时间单位/字符,这是最优解。

作为对比,若分配 a→a\to ..,b→b\to -,c→c\to .-,则期望传输时间为 0.3⋅2+0.6⋅2+0.1⋅3=2.10.3 \cdot 2 + 0.6 \cdot 2 + 0.1 \cdot 3 = 2.1。而分配 a→a\to -,b→b\to .,c→c\to .. 虽然期望传输时间更低,但该方案无效,因为 . 是 .. 的前缀。

翻译由 DeepSeek R1 完成

输入解题思路,AI测评打分。不知道怎么写?

首页