QOJ.ac

QOJ

Límite de tiempo: 1 s Límite de memoria: 512 MB Puntuación total: 100

#4509. 安全的秘密

Estadísticas

十九世纪最聪明、最富有的公爵之一建造了一个防盗室来存放他的贵重物品,并以一种巧妙的方式选择了保险柜的密码。他非常害怕被抢劫,以至于没有告诉任何人保险柜的秘密;他只是把获取密码的方法写在一张纸上,留给他的继承人在他去世时查看。

  1. 查看我公爵戒指的底部,现在这枚戒指归你了。
  2. 按照顺时针方向写下数字和符号,从最靠近红宝石的数字开始,并省略最后一个符号。这就是第一组数字和符号序列。 从下一个数字开始,按照顺时针方向重复同样的操作。这就是第二组数字和符号序列。 重复此过程,始终从下一个数字开始,直到你已经从所有数字开始过为止。现在你有了几组数字和符号序列。
  3. 对于每一组数字和符号序列,执行以下操作: (a) 将每个 ? 替换为 +-* 符号。 以所有可能的方式进行替换,从而得到多个算术表达式。 (b) 计算每个算术表达式的值,以任意顺序执行加法、减法和乘法。 以所有可能的方式进行计算,从而得到多个值。 (c) 选择这些值中的最小值和最大值。 (d) 写下最小值的数字,并在其后附加最大值的数字。这就是该数字和符号序列的密码。
  4. 将所有数字和符号序列的密码按获取顺序连接起来。该数字序列即为保险柜的秘密。

当公爵去世后,他的儿子读了这张纸条,试图找出保险柜的秘密。前两个步骤非常简单,因为只有五组数字和符号序列,获取顺序如下:

1 ? 5 + 0 ? -2 - -3
5 + 0 ? -2 - -3 * 1
0 ? -2 - -3 * 1 ? 5
-2 - -3 * 1 ? 5 + 0
-3 * 1 ? 5 + 0 ? -2

然后,他进入第三步,并决定从第一组数字和符号序列开始。当他意识到可以创建多个算术表达式时,困难在 (a) 点出现了,例如: $1 + 5 + 0 + -2 - -3$,$1 - 5 + 0 * -2 - -3$,以及 $1 * 5 + 0 - -2 - -3$。

因此,他决定在完成此任务之前先弄清楚其余的规则。在 (b) 点,他必须计算算术表达式。这看起来很简单。$1 + 5 + 0 + -2 - -3$ 的值是 $7$。但是他能从 $1 - 5 + 0 * -2 - -3$ 中得到多少个不同的值呢?

  • 如果运算是从左到右执行的,即 $(((1 - 5) + 0) * -2) - -3$,结果将是 $11$。
  • 如果运算是从右到左执行的,即 $1 - (5 + (0 * (-2 - -3)))$,结果将是 $-4$。
  • 如果先执行第一次减法和乘法,即 $(1 - 5) + (0 * -2) - -3$,结果将是 $-1$。
  • 还有许多其他选择!

在绝望中,他得出结论,他必须在第三步中获得大量的数值。幸运的是,最后的规则实际上很简单。如果 $-4$ 是从第一组序列中获得的最小值,而 $11$ 是最大值,那么第一组序列的密码就是 $411$。此外,如果第二组序列的密码是 $512$,第三组序列的密码是 $613$,第四组序列的密码是 $714$,第五组序列的密码是 $815$,那么保险柜的秘密就是 $411512613714815$。

尽管公爵的儿子不遗余力地寻找秘密,但他从未实现这一目标。事实上,到目前为止还没有人能打开这个保险柜。现在宫殿将被改建成博物馆,你能帮忙揭开宝藏的秘密吗?

题目描述

给定从公爵戒指上获得的数字和符号序列,从最靠近红宝石的数字开始,按顺时针方向排列,并包含最后一个符号,目标是找出保险柜的秘密。保证对于给定的输入,上述过程获得的任何值都适合标准的有符号 64 位整数。

输入格式

第一行包含一个正整数 $k$,表示构成序列的 (数字, 符号) 对的数量。 接下来一行包含 $2k$ 个元素 $n_1, s_1, n_2, s_2, \dots, n_k, s_k$,以单个空格分隔,其中 $n_i$ 表示一个数字,$s_i$ 表示一个符号,即 +-*?(对于每个 $i = 1, 2, \dots, k$)。

数据范围

$2 \le k \le 200$ 构成序列的 (数字, 符号) 对的数量。 $-9 \le n_i \le 9$ 序列中的数字。

输出格式

输出一行,包含保险柜的秘密。

样例

样例输入 1

5
1 ? 5 + 0 ? -2 - -3 *

样例输出 1

914710203014163336

Figure 1. 公爵戒指上的数字和符号序列

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.