QOJ.ac

QOJ

Time Limit: 3.0 s Memory Limit: 256 MB Total points: 100

#18446. 茶排序

Statistics

在漫长而劳累的编程工作后,Stepan 决定喝下午茶。程序员们喜欢各种各样的茶:红茶(kocha)、煎茶(sencha)、抹茶(matcha)、摩卡(mocha)等等。Stepan 走进厨房,发现抽屉里所有的茶包都混在了一起。真是太乱了!Stepan 喜欢整洁,他希望将茶包按平时的顺序排列好。

抽屉里有 $N$ 包茶,排成 $K$ 行。在每一行中,茶包排成一列,从离 Stepan 最近的茶包一直延伸到最远的茶包。但是抽屉非常矮,你只能拿走每一行中最近的那包茶。因此,这里唯一可行的操作是从第 $i$ 行拿走最近的茶包,并将其放入第 $j$ 行,使其成为第 $j$ 行中最近的茶包。用编程术语来说,每一行都是一个栈,或者说“后进先出”(LIFO)结构。

每包茶都标有一个整数,表示茶的类型。Stepan 喜欢满足以下条件的排列:

  1. 每一行中的茶包数量相同,
  2. 对于任意 $i < j$,第 $i$ 行中茶包的类型编号小于或等于第 $j$ 行中茶包的类型编号,
  3. 在每一行中,茶包按类型编号从最近到最远的顺序升序排列。

请设计一个不超过 $13 \cdot N$ 次移动茶包操作的方案,使得所有茶包都按照 Stepan 的喜好摆放。你不需要最小化操作次数。

输入格式

输入的第一行包含两个整数 $N$ 和 $K$ —— 茶包的总数和行数($1 \le N \le 10^5$,$11 \le K \le 111$)。

接下来有 $K$ 行,其中第 $r$ 行定义了第 $r$ 行的茶包。对于每一行,首先给出一个整数 $T_r$,表示该行中的茶包数量,随后给出 $T_r$ 个整数 —— 该行中各茶包的类型($0 \le T_r \le N$)。每一行中的茶包按从最近到最远的顺序给出。

保证所有 $T_r$ 的总和等于 $N$,且 $N$ 可以被 $K$ 整除。表示茶包类型的整数绝对值不超过 $10^9$。

输出格式

在输出的第一行中,输出一个整数 $M$ —— 你的方案中的操作次数($0 \le M \le 13 \cdot N$)。

在接下来的 $M$ 行中,按执行顺序输出每次操作。对于每次操作,输出两个空格分隔的整数:$i$ —— Stepan 必须从中取出最近茶包的行号,以及 $j$ —— 他必须将其放入的行号($1 \le i, j \le K$)。

样例

输入样例 1

33 11
3 -1 1 1
3 1 1 1
3 1 2 2
3 3 3 3
3 3 4 4
3 5 7 7
3 7 7 7
3 7 8 8
3 8 9 9
3 9 9 9
3 9 9 9

输出样例 1

0

输入样例 2

33 11
3 -1 1 1
3 1 1 1
3 1 2 2
0
5 3 4 3 3 4
4 5 7 7 3
3 7 7 7
3 7 8 8
3 8 9 9
3 9 9 9
3 9 9 9

输出样例 2

13
6 7
6 7
6 7
6 4
7 6
7 6
7 6
5 4
5 11
5 4
5 4
11 5
4 5

说明

在第一个样例中,所有的茶包已经按照 Stepan 喜欢的顺序摆放好了,因此不需要进行任何操作。

在第二个样例中,第 4 行是空的,本应放在那里的茶包被放到了第 5 行和第 6 行。方案中的前 7 次操作从第 6 行中取出类型为 3 的茶包。注意,这个茶包是最远的,所以为了取出它,必须先取出前面的 3 个茶包。这些茶包被以相反的顺序放入第 7 行;在移出所需的类型为 3 的茶包后,它们又被按正确的顺序放回。剩下的 6 次操作将 2 个类型为 3 的茶包从第 5 行移动到第 4 行。这使得该行中一个类型为 4 的茶包被移到了更深(更远)的位置。

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.