#P14036. [PAIO 2025] Rooks
[PAIO 2025] Rooks
Description
给定一个 的矩阵 ,矩阵中的每个元素从 到 恰好出现一次。现在有一个车(rook),它正位于矩阵中值为 的单元格所在的位置。此外,还给定一个整数 。
该车可以从单元格 跳到单元格 ,当且仅当同时满足下列所有条件:
- ,即必须移动到不同的单元格;
- 要么 ,要么 ,即只能在同一行或同一列中移动;
- 。
请为矩阵中的每个单元格求出该车从值为 的单元格出发最少需要多少步可以到达,若无法到达则返回 。
实现细节
你需要实现如下函数:
int32 [][] calculate_moves(int32 [][] A, int32 K)
- :长度为 的数组,每个元素为长度为 的数组,描述了棋盘。
- :移动限制参数。
- 该函数应返回长度为 的数组,每个元素为长度为 的数组,表示每个单元格最少需要多少步可到达,无法到达的单元格对应值为 。
Input Format
N M K
A[0][0] A[0][1] \cdots A[0][M-1]
A[1][0] A[1][1] \cdots A[1][M-1]
\vdots
A[N-1][0] A[N-1][1] \cdots A[N-1][M-1]
Output Format
R[0][0] R[0][1] \cdots R[0][M-1]
R[1][0] R[1][1] \cdots R[1][M-1]
\vdots
R[N-1][0] R[N-1][1] \cdots R[N-1][M-1]
其中, 为你实现的 calculate_moves 返回的结果数组。
Hint
输入输出样例
样例 1
考虑如下调用:
calculate_moves(
[[8, 2, 4, 20, 5],
[14, 13, 1, 19, 7],
[15, 18, 12, 6, 11],
[10, 9, 3, 16, 17]])
这里 。
包含 的单元格是 ,因此在你返回的数组 中,,因为起点无需移动。
到达 ,可以从 走到 (同一列,且 ),再从 走到 (同一行,),最后从 走到 (同一列,)。因此 。
注意无法到达 ,因此 。
函数返回结果如下:
[[2, -1, 1, 6, 2],
[4, -1, 0, 5, 3],
[4, 5, 5, -1, 4],
[3, -1, 1, -1, -1]]
评分器样例
输入格式
N M K
A[0][0] A[0][1] \cdots A[0][M-1]
A[1][0] A[1][1] \cdots A[1][M-1]
\vdots
A[N-1][0] A[N-1][1] \cdots A[N-1][M-1]
输出格式
R[0][0] R[0][1] \cdots R[0][M-1]
R[1][0] R[1][1] \cdots R[1][M-1]
\vdots
R[N-1][0] R[N-1][1] \cdots R[N-1][M-1]
数据范围与子任务
- 中每个整数 到 恰好出现一次。
| 子任务 | 分值 | 其他约束 |
|---|---|---|
| 1 | 9 | |
| 2 | 15 | |
| 3 | 11 | |
| 4 | 19 | |
| 5 | 15 | |
| 6 | 31 | 无进一步约束。 |
由 ChatGPT 5 翻译
京公网安备 11011102002149号