CF237B Young Table

题目描述

你有一个表格 $a$,包含 $n$ 行,从 $1$ 到 $n$ 编号。第 $i$ 行有 $c_{i}$ 个单元格,且对于所有 $i$ 满足 $1 < i \leq n$,都有 $c_{i} \leq c_{i-1}$。 设 $s$ 为表格 $a$ 总的单元格数,即 $$ s = c_1 + c_2 + \cdots + c_n $$ 我们知道,每个单元格里包含一个 $1$ 到 $s$ 的整数,且所有整数互不相同。 假设第 $i$ 行的单元格从 $1$ 到 $c_{i}$ 编号,记第 $i$ 行第 $j$ 列单元格中的数为 $a_{i, j}$。你的任务是通过若干次交换操作,将表格中的数字重新排列,使其满足以下两个条件: 1. 对所有 $i, j$ 满足 $1 < i \leq n,\, 1 \leq j \leq c_{i}$,都有 $a_{i, j} > a_{i-1, j}$; 2. 对所有 $i, j$ 满足 $1 \leq i \leq n,\, 1 < j \leq c_{i}$,都有 $a_{i, j} > a_{i, j-1}$。 每次交换操作,你可以选择表格中两个不同的单元格,交换它们当前存储的数字。即交换前第一个单元格里的数字会被放到第二个单元格里,同时第二个单元格中的数字放到第一个单元格里。 请用不超过 $s$ 次操作,将表格中的数字重新排列,以满足上述条件。你无需使操作次数最小。

输入格式

第一行包含一个整数 $n$ $(1 \leq n \leq 50)$,表示表格的行数。 第二行包含 $n$ 个用空格分隔的整数 $c_{i}$ $(1 \leq c_{i} \leq 50;\ c_{i} \leq c_{i-1})$,表示每行的单元格数量。 接下来 $n$ 行,每行 $c_{i}$ 个用空格分隔的整数,第 $i$ 行第 $j$ 个整数表示 $a_{i, j}$。 保证所有给定的 $a_{i, j}$ 都是正整数且不超过 $s$,并且两两不同。

输出格式

第一行输出一个整数 $m$ $(0 \leq m \leq s)$,表示你实际执行的交换次数。 接下来 $m$ 行,每行四个用空格分隔的整数 $x_{i}, y_{i}, p_{i}, q_{i}$ $(1 \leq x_{i}, p_{i} \leq n;\ 1 \leq y_{i} \leq c_{x_i};\ 1 \leq q_{i} \leq c_{p_i})$,表示你将第 $(x_{i}, y_{i})$ 和 $(p_{i}, q_{i})$ 两个单元格的数字进行交换。请按操作的执行顺序输出。

说明/提示

由 ChatGPT 5 翻译