#P15092. [UOI 2025 II Stage] Diagonal Numbers
[UOI 2025 II Stage] Diagonal Numbers
说明
Vasylko 得到了写有数字 到 的方块。其中写有数字 的方块有 个,写有数字 的方块有 个,依此类推,写有数字 的方块有 个,写有数字 的方块有 个。
他将这些方块摆放在一个没有上边框的正方形框架内,使得所有方块都位于从左上角到右下角的对角线下方。最左边的第一列有 个写有数字 的方块;第二列有 个写有数字 的方块……第 列有 个写有数字 的方块。也就是说,第 列有 个写有数字 的方块。
:::align{center}

初始状态 :::
Vasylko 想重新排列它们,使得所有方块都位于另一条对角线下方。这样,从下往上数的第一行应有 个写有数字 的方块;第二行应有 个写有数字 的方块……第 行应有 个写有数字 的方块。也就是说,第 行应有 个写有数字 的方块。
:::align{center}

最终状态 :::
他还决定,只将方块从一列的顶部移动到另一列的顶部(不一定是相邻列)。请以最高效的方式帮助他——找出他所需的最少移动次数,并输出 Vasylko 应进行的移动。
你可以获得部分分数;详见下文。
输入格式
第一行包含一个整数 ()——正方形的尺寸。
输出格式
- 第一行输出一个整数 ()——重新排列方块所需的最少移动次数。
- 接下来的 行,每行输出两个整数 和 (;),其中 表示取出方块的列号, 表示放入方块的列号。
3
8
3 2
1 3
2 1
2 3
1 3
2 3
1 2
3 2
提示
首先,我们将处理最后一列。因此,以最少移动次数重新排列方块的唯一第一步可能是将 从第三列移动到第二列,因为如果不移动 或不将其移动到第二列,我们将无法将 放在第三列的开头。
:::align{center}
前 3 个状态
:::
放置好 之后,我们需要将 和 放到它们在第三列的正确位置。同样,唯一的方法是先将 移动到第一列,否则我们将无法在下一步中将 放入第三列,然后再将 放回它的位置。
:::align{center}

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

最后 3 个状态 :::
评分细则
- ( 分):;
- ( 分):;
- ( 分):;
- ( 分):;
- ( 分):;
- ( 分):无额外限制。
对于每个测试组,如果你为该组中每个测试输出了正确的 ,你可以获得该组一半的分数。如果你输出了错误的 但移动指令正确,你也可以获得四分之一的分数;此时要求 。
注意,要获得一半的分数,你需要输出正确的 并且:
- 要么不输出其他内容,即只输出 ,不输出移动指令;
- 要么完整输出所有 条移动指令,其中所有列号都在 到 之间。除此之外没有其他要求。
如果你只输出部分指令、或输出过多指令、或输出的数字不是列号等,你将获得 分。
翻译由 DeepSeek V3 完成
京公网安备 11011102002149号