#P15092. [UOI 2025 II Stage] Diagonal Numbers

    ID: 15117 远端评测题 1000ms 512MiB 尝试: 0 已通过: 0 难度: 6 上传者: 标签>递归2025Special Judge构造UOI(乌克兰)

[UOI 2025 II Stage] Diagonal Numbers

说明

Vasylko 得到了写有数字 11nn 的方块。其中写有数字 nn 的方块有 11 个,写有数字 n1n-1 的方块有 22 个,依此类推,写有数字 22 的方块有 n1n-1 个,写有数字 11 的方块有 nn 个。

他将这些方块摆放在一个没有上边框的正方形框架内,使得所有方块都位于从左上角到右下角的对角线下方。最左边的第一列有 nn 个写有数字 11 的方块;第二列有 n1n-1 个写有数字 22 的方块……第 nn 列有 11 个写有数字 nn 的方块。也就是说,第 ii 列有 ni+1n-i+1 个写有数字 ii 的方块。

:::align{center}

初始状态 :::

Vasylko 想重新排列它们,使得所有方块都位于另一条对角线下方。这样,从下往上数的第一行应有 nn 个写有数字 11 的方块;第二行应有 n1n-1 个写有数字 22 的方块……第 nn 行应有 11 个写有数字 nn 的方块。也就是说,第 ii 行应有 ni+1n-i+1 个写有数字 ii 的方块。

:::align{center}

最终状态 :::

他还决定,只将方块从一列的顶部移动到另一列的顶部(不一定是相邻列)。请以最高效的方式帮助他——找出他所需的最少移动次数,并输出 Vasylko 应进行的移动。

你可以获得部分分数;详见下文。

输入格式

第一行包含一个整数 nn3n10003 \le n \le 1000)——正方形的尺寸。

输出格式

  • 第一行输出一个整数 kk1k1061 \leq k \leq 10^6)——重新排列方块所需的最少移动次数。
  • 接下来的 kk 行,每行输出两个整数 aabb1a,bn1 \leq a, b \leq naba \neq b),其中 aa 表示取出方块的列号,bb 表示放入方块的列号。
3
8
3 2
1 3
2 1
2 3
1 3
2 3
1 2
3 2

提示

首先,我们将处理最后一列。因此,以最少移动次数重新排列方块的唯一第一步可能是将 33 从第三列移动到第二列,因为如果不移动 33 或不将其移动到第二列,我们将无法将 11 放在第三列的开头。

:::align{center} 前 3 个状态 :::

放置好 11 之后,我们需要将 2233 放到它们在第三列的正确位置。同样,唯一的方法是先将 33 移动到第一列,否则我们将无法在下一步中将 22 放入第三列,然后再将 33 放回它的位置。

:::align{center}

接下来 3 个状态 :::

此后,我们想要正确放置第二列。为了让 11 成为第一个数字,我们首先需要取出 22,而 22 只能在最后一列被取出。放置好 11 后,我们只需将 22 放回第二列,即可达到期望的方块状态。

:::align{center}

最后 3 个状态 :::

评分细则

  • 1212 分):n=4n = 4
  • 2020 分):n=5n = 5
  • 2020 分):n=6n = 6
  • 2020 分):n10n \le 10
  • 2020 分):n100n \le 100
  • 88 分):无额外限制。

对于每个测试组,如果你为该组中每个测试输出了正确的 kk,你可以获得该组一半的分数。如果你输出了错误的 kk 但移动指令正确,你也可以获得四分之一的分数;此时要求 k106k \le 10^6

注意,要获得一半的分数,你需要输出正确的 kk 并且:

  • 要么不输出其他内容,即只输出 kk,不输出移动指令;
  • 要么完整输出所有 kk 条移动指令,其中所有列号都在 11nn 之间。除此之外没有其他要求。

如果你只输出部分指令、或输出过多指令、或输出的数字不是列号等,你将获得 00 分。

翻译由 DeepSeek V3 完成