luogu#P16443. [XJTUPC 2026] 矩阵拆分

[XJTUPC 2026] 矩阵拆分

题目描述

给定一个 n×nn\times n 的非负整数矩阵 BB。你需要构造一个 n×nn\times n 的非负整数矩阵 AA,满足:

  • A+AT=BA+A^\mathsf{T} = B。其中 ATA^\mathsf{T} 表示 AA 的转置,即将其行和列互换得到的新矩阵(原来 AA 中第 ii 行第 jj 列的元素,在 ATA^\mathsf{T} 中位于第 jj 行第 ii 列)。
  • 对于任意 i=1,2,,ni = 1,2,\cdots , n,都有
$$\left\lfloor \frac{1}{2}\sum\limits_{j=1}^n B_{ij} \right\rfloor \le \sum\limits_{j=1}^n A_{ij} \le \left\lceil \frac{1}{2}\sum\limits_{j=1}^n B_{ij} \right\rceil$$
  • 对于任意 j=1,2,,nj = 1,2,\cdots , n,都有
$$\left\lfloor \frac{1}{2}\sum\limits_{i=1}^n B_{ij}\right\rfloor \le \sum\limits_{i=1}^n A_{ij} \le \left\lceil \frac{1}{2}\sum\limits_{i=1}^n B_{ij} \right\rceil$$

或报告无解。

其中,AijA_{ij} 为矩阵 AAii 行第 jj 列的元素,BijB_{ij} 为矩阵 BBii 行第 jj 列的元素。

如果存在多个解,输出任意一个即可。

输入格式

本题包含多组测试用例。输入的第一行,包含一个正整数 TT1T10001 \leq T \leq 1000),表示测试用例的数量。

接下来是 TT 组测试用例的描述。

每个测试用例的第一行包含一个整数 nn1n22001\le n \le 2200),表示矩阵的大小。

接下来 nn 行,每行 nn 个整数,用一个空格分隔,描述矩阵 BB,其中第 ii 行第 jj 个整数表示 BijB_{ij}0Bij1090 \leq B_{ij} \leq 10^9)。

保证所有测试用例中 n2n^2 的总和不超过 5×1065 \times 10^6

输出格式

对于每个测试用例,若无解,输出一行,仅包含一个字符串 No\tt{No}

否则,输出 n+1n+1 行,其中:

  • 第一行包含一个字符串 Yes\tt{Yes}
  • 接下来 nn 行,每行包含 nn 个整数,用一个空格分隔,描述你构造的矩阵 AA,其中第 ii 行第 jj 个整数表示 AijA_{ij}0Aij1090 \leq A_{ij} \leq 10^9)。

如果存在多个解,输出任意一个即可。

答案对大小写不敏感。例如 yEs\tt{yEs}Yes\tt{Yes}yes\tt{yes}YES\tt{YES} 都会被视为 Yes\tt{Yes}

3
4
2 1 0 0
1 2 0 0
0 0 2 3
0 0 3 2
4
0 2 1 2
2 0 3 3
1 3 0 2
2 3 2 0
3
1 2 3
4 5 6
7 8 9
Yes
1 1 0 0
0 1 0 0
0 0 1 2
0 0 1 1
Yes
0 1 1 1
1 0 1 2
0 2 0 1
1 1 1 0
No