#loj6821. 「THUPC 2022」拯救还是毁灭
「THUPC 2022」拯救还是毁灭
[AdditionalFile6821.zip](file://AdditionalFile6821.zip?type=additional_file)
#6821. 「THUPC 2022」拯救还是毁灭
标签: 传统 | 时间限制: 2000 ms | 内存限制: 512 MiB |
题目描述
有人说,它拯救了世界;也有人说,它毁灭了世界。
这个世界危在旦夕!秩序已然一片混乱。
秩序可以抽象成一个 的矩阵,矩阵中是一个 的排列。你想要拯救世界,于是请来了神,来帮忙把秩序恢复原状。然而神也不是万能的,它只能做到交换矩阵中同一行或者同一列中的两个数。而且,它并不知道要怎么交换才能复原,得听你的指导。
幸好,你不一定需要在最少的交换次数之内完成复原。你只需要不比最糟糕的情况差就好。也就是说,如果你的交换次数为 ,且对于所有 的排列,最小交换次数的最大值为 ,你只需要满足 。
注:复原指的是将矩阵变为如下的一个矩阵:
$\begin{matrix} 1 & 2 & 3 & \cdots & n \\ n+1 & n+2 & n+3 & \cdots & 2n \\ 2n+1 & 2n+2 & 2n+3 & \cdots & 3n\\ \vdots & \vdots & \vdots & \ddots & \vdots \\ (n-1)n+1 & (n-1)n+2 & (n-1)n+3 & \cdots & n^2 \end{matrix}$
输入格式
第一行一个正整数 。
接下来 行,每行 个正整数,表示这个 的矩阵。保证 中的每个数恰好出现一次。
输出格式
第一行一个非负整数 ,表示你的交换次数。
接下来 行,每行四个正整数 ,表示将第 行 列的数与第 行 列的数交换。
你需要保证 或 。
样例 1
输入
2
4 2
3 1
输出
3
1 1 1 2
1 2 2 2
1 1 1 2
可以证明这是交换次数最少的方案之一,显然它符合条件。
样例 2
输入
2
2 1
3 4
输出
3
2 1 2 2
1 1 1 2
2 1 2 2
对于这个输入来说,这个样例输出的方案不是交换次数最少的方案,但是我们知道存在一个 的排列(即上一个样例)需要至少 次的交换,所以这个方案也是可行的。
样例 3
输入
2
3 2
1 4
输出
2
1 1 1 1
1 1 2 1
我们允许出现 的情况。
样例 4
输入
2
1 2
3 4
输出
0
注意 可以等于 。
数据范围与提示
保证 。
保证输入的矩阵中 恰好各出现一次。
来自 THUPC(THU Programming Contest,清华大学程序设计竞赛)2022。
题解等资源可在 https://github.com/THUSAAC/THUPC2022-Final 查看。