QOJ.ac

QOJ

Limite de temps : 1 s Limite de mémoire : 1024 MB Points totaux : 100

#18247. 摩天轮

Statistiques

切塞纳蒂科(Cesenatico)的主广场上有一个五彩缤纷的摩天轮,这是该市的地标性景点之一。在冬季,摩天轮被拆卸并存放在仓库中,但现在夏天快到了,终于到了重新组装它的时候了!零件刚刚运抵广场,在你的帮助下,我们准备将它们组装在一起。

在你面前有 $N$ 个独立的座舱,需要以环形方式连接在一起以组成摩天轮。座舱的编号为从 $0$ 到 $N - 1$,但不一定按照它们应当连接的顺序排列。

每个座舱都配有一个特殊的接头,用于按顺时针方向连接到下一个座舱。每个接头有以下两种可能类型之一:

  • [+] 型:只能用于连接到编号更高的座舱;
  • [-] 型:只能用于连接到编号更低的座舱。

在下面的示例中,座舱 2 具有 [+] 型接头。这意味着顺时针方向的下一个座舱必须是座舱 3 或座舱 4。

图 1:$N = 5$ 且有五个独立的座舱,每个座舱都有一个 [+] 或 [-] 型的接头。

给你座舱的数量及其接头类型。你的任务是确定是否可以将所有 $N$ 个座舱组装成一个摩天轮。如果可以,你还需要找到座舱在摩天轮上出现的一种顺序。

图 2:一个可以使用上面所示的五个座舱组装而成的有效摩天轮。

图 2 展示了由图 1 中所示的五个座舱组装而成的一个有效摩天轮。

形式上,一个有效的座舱顺序是一个由数字组成的序列 $C_0, C_1, \dots, C_{N-1}$,满足以下性质:

  • 从 $0$ 到 $N - 1$ 的每个数字在序列中恰好出现一次。
  • 对于每个 $0 \le i \le N - 2$,座舱 $C_{i+1}$ 必须满足座舱 $C_i$ 的接头类型所施加的条件。也就是说,如果座舱 $C_i$ 的接头类型是 [+],则 $C_{i+1} > C_i$;如果是 [-],则 $C_{i+1} < C_i$。
  • 此外,座舱 $C_0$ 必须满足座舱 $C_{N-1}$ 的接头类型所施加的条件。

输入格式

输入包含两行。

第一行包含一个整数 $N$,表示座舱的数量。

第二行包含一个长度为 $N$ 的字符串 $S$,由字符 +- 组成。如果 $S_i = \text{'+'}$,则座舱 $i$ 的接头类型为 [+]。如果 $S_i = \text{'-'}$,则座舱 $i$ 的接头类型为 [-]

输出格式

如果不存在满足约束条件的顺序,输出 NO

否则,输出 YES,并在下一行输出 $N$ 个整数,表示有效摩天轮上座舱按顺时针方向排列的索引(可以从任意索引开始)。如果存在多个解,你可以输出其中任意一个。

数据范围

  • $3 \le N \le 300\,000$。
  • $S_i = \text{'+'}$ 或 $\text{'-'}$。

子任务

你的程序将在分为若干个子任务的多个测试用例上进行测试。要获得某个子任务的分数,你必须正确解决其中包含的所有测试。

  • 子任务 0[0 分]:样例。
  • 子任务 1[16 分]:$N = 3$。
  • 子任务 2[13 分]:字符串 $S$ 中恰好有一个 +
  • 子任务 3[24 分]:字符串 $S$ 中的字符 +- 交替出现;也就是说,对于每个 $0 \le i \le N - 2$,都有 $S_i \ne S_{i+1}$。
  • 子任务 4[23 分]:$N \le 1000$。
  • 子任务 5[24 分]:无附加限制。

样例

输入样例 1

3
+++

输出样例 1

NO

输入样例 2

5
+-+--

输出样例 2

0 3 2 4 1

输入样例 3

7
------+

输出样例 3

NO

输入样例 4

8
+-+-+-+-

输出样例 4

3 2 4 6 7 1 0 5

输入样例 5

11
+++--+-++--

输出样例 5

10 0 5 8 9 4 2 6 3 1 7

说明

第一个样例。我们有三个座舱。由于所有接头都是 [+] 类型,我们必须安排座舱,使得每个座舱后面都紧跟一个编号更高的座舱。可以证明,这三个座舱的任何顺序都无法满足该条件,因此答案为 NO

第二个样例。参见题目描述中的图 1 和图 2。我们有五个座舱。我们必须按顺时针方向安排它们,使得:

  • 座舱 0 和 2(接头类型为 [+])后面紧跟一个编号更高的座舱;
  • 座舱 1、3 和 4(接头类型为 [-])后面紧跟一个编号更低的座舱。

满足所有这些条件的摩天轮如下图所示。对于 [+] 型接头,要求满足,因为 $0 < 3$ 且 $2 < 4$。对于 [-] 型接头,要求满足,因为 $1 > 0$、$3 > 2$ 且 $4 > 1$。对应于该摩天轮有多种输出:除了 0 3 2 4 1 之外,你还可以输出 3 2 4 1 02 4 1 0 34 1 0 3 21 0 3 2 4

图 3:第二个样例的摩天轮(此图与图 2 相同)。

第三个样例。我们有七个座舱:除了最后一个接头是 [+] 类型外,所有接头都是 [-] 类型。因此,我们必须安排座舱,使得除了座舱 6 后面必须紧跟一个编号更高的座舱外,每个座舱后面都紧跟一个编号更低的座舱。可以证明不存在这样的顺序,因此答案为 NO

下图展示了对应于最后两个样例输出的摩天轮。

图 4:第四个样例的摩天轮。

图 5:第五个样例的摩天轮。

Editorials

IDTypeStatusTitlePosted ByLast UpdatedActions
#1777EditorialOpenOfficial EditorialAnonymous2026-05-21 14:16:44View

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.