P14036 [PAIO 2025] Rooks

题目背景

**DO NOT** include `rooks.h`. Submit using C++ >=17.

题目描述

给定一个 $N \times M$ 的矩阵 $A$,矩阵中的每个元素从 $1$ 到 $N \times M$ 恰好出现一次。现在有一个车(rook),它正位于矩阵中值为 $1$ 的单元格所在的位置。此外,还给定一个整数 $K$。 该车可以从单元格 $(r,c)$ 跳到单元格 $(r',c')$,当且仅当同时满足下列所有条件: * $(r,c) \neq (r',c')$,即必须移动到不同的单元格; * 要么 $r=r'$,要么 $c=c'$,即只能在同一行或同一列中移动; * $0 < A[r'][c'] - A[r][c] \leq K$。 请为矩阵中的每个单元格求出该车从值为 $1$ 的单元格出发最少需要多少步可以到达,若无法到达则返回 $-1$。 ### 实现细节 你需要实现如下函数: ``` vector calculate_moves(vector A, int K) ``` * $A$:长度为 $N$ 的数组,每个元素为长度为 $M$ 的数组,描述了棋盘。 * $K$:移动限制参数。 * 该函数应返回长度为 $N$ 的数组,每个元素为长度为 $M$ 的数组,表示每个单元格最少需要多少步可到达,无法到达的单元格对应值为 $-1$。

输入格式

``` N M K A[0][0] A[0][1] ... A[0][M-1] A[1][0] A[1][1] ... A[1][M-1] . . . A[N-1][0] A[N-1][1] ... A[N-1][M-1] ```

输出格式

``` R[0][0] R[0][1] ... R[0][M-1] R[1][0] R[1][1] ... R[1][M-1] . . . R[N-1][0] R[N-1][1] ... R[N-1][M-1] ``` 其中,$R$ 为你实现的 `calculate_moves` 返回的结果数组。

说明/提示

## 输入输出样例 ### 样例 1 考虑如下调用: ``` calculate_moves( [[8, 2, 4, 20, 5], [14, 13, 1, 19, 7], [15, 18, 12, 6, 11], [10, 9, 3, 16, 17]]) ``` 这里 $N=4, M=5, K=5$。 包含 $1$ 的单元格是 $A[1][2]$,因此在你返回的数组 $R$ 中,$R[1][2]=0$,因为起点无需移动。 到达 $A[3][0]=10$,可以从 $A[1][2]=1$ 走到 $A[0][2]=4$(同一列,且 $4-1=3 \leq 5$),再从 $A[0][2]=4$ 走到 $A[0][0]=8$(同一行,$8-4=4\leq5$),最后从 $A[0][0]=8$ 走到 $A[3][0]=10$(同一列,$10-8=2$)。因此 $R[3][0]=3$。 注意无法到达 $A[0][1]=2$,因此 $R[0][1]=-1$。 函数返回结果如下: ``` [[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 \leq N, M \leq 2500$ * $1 \leq K \leq N \cdot M$ * $1 \leq A[i][j] \leq N \cdot M$ * $A$ 中每个整数 $1$ 到 $N \cdot M$ 恰好出现一次。 | 子任务 | 分值 | 其他约束 | | :------ | :---- | :--------------------- | | 1 | 9 | $N=1$ | | 2 | 15 | $N,M \leq 100$ | | 3 | 11 | $K=1$ | | 4 | 19 | $K=N \cdot M$ | | 5 | 15 | $N,M \leq 500$ | | 6 | 31 | 无进一步约束。 | 由 ChatGPT 5 翻译