QOJ.ac

QOJ

时间限制: 1 s 内存限制: 32 MB 总分: 100

#12694. 俄罗斯方块攻击

统计

在 Byteotia,一种名为“俄罗斯方块攻击”(Tetris Attack)的益智游戏最近非常流行。该游戏本身非常复杂,因此我们只介绍其简化规则:玩家拥有一个由 $2n$ 个元素组成的堆栈,这些元素一个叠一个地放置,并标记有 $n$ 种不同的符号。每种符号在堆栈中恰好出现两次。玩家的一次移动包括交换两个相邻的元素,即互换它们的位置。如果交换后,有两个标记相同符号的元素相邻,它们将同时从堆栈中移除。随后,原本位于它们之上的所有元素会下落,这很可能会引发进一步的消除。玩家的目标是以最少的移动次数清空堆栈。

编写一个程序,完成以下任务:

  • 从标准输入读取初始堆栈内容的描述;
  • 找到移动次数最少的解决方案;
  • 将结果输出到标准输出。

输入格式

标准输入的第一行包含一个整数 $n$,$1 \le n \le 50,000$。接下来的 $2n$ 行描述了堆栈的初始内容。第 $(i+1)$ 行包含一个整数 $a_i$,表示从底部数第 $i$ 个元素所标记的符号($1 \le a_i \le n$)。每个符号在堆栈中恰好出现两次。此外,初始时没有两个相同的符号相邻。测试数据经过精心设计,保证存在不超过 $1,000,000$ 次移动的解决方案。

输出格式

应将移动次数最少的解决方案输出到标准输出,格式如下:第一行包含一个整数 $m$,表示最少的移动次数。接下来的 $m$ 行应描述最优解本身,即一个包含 $m$ 个整数的序列 $p_1, \dots, p_m$,每行一个。$p_i$ 表示在第 $i$ 次移动中,玩家选择了交换从底部数第 $p_i$ 个和第 $(p_i+1)$ 个元素。

如果存在多个最优解,程序可以输出其中任意一个。

样例

输入 1

5
5
2
3
1
4
1
4
3
5
2

输出 1

2
5
2

输入 2

3
1
2
3
1
2
3

输出 2

3
3
4
2

样例输出 2 的另一种解法

3
4
3
2

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.