#dxy26004. 矩阵平滑稳定

矩阵平滑稳定

题目描述

给定一个 NNMM 列的整数矩阵 AA,每个元素取值范围 [0,255][0,255],对矩阵重复执行迭代平滑操作,直到矩阵进入稳定状态。

平滑操作规则

对矩阵每一个位置 (i,j)(i,j)

  1. 取以 (i,j)(i,j) 为中心的 3×33 \times 3 窗口;
  2. 若窗口超出矩阵边界,则仅保留窗口与矩阵重叠区域内的所有元素;
  3. 计算区域内所有元素的平均值,向下取整,作为新矩阵 (i,j)(i,j) 的值。

收敛稳定条件

完整执行一轮平滑操作后,生成的新矩阵与操作前原矩阵完全一致(所有位置数值无变化),此时停止迭代。

输出两项内容:

  1. 到达稳定状态一共进行的平滑迭代次数;
  2. 最终稳定后的完整矩阵。

输入格式

第一行两个整数 N,MN,M,代表矩阵行数、列数。 接下来 NN 行,每行 MM 个整数,为矩阵初始元素。

输出格式

第一行单独一个整数:迭代总次数。 之后 NN 行,每行 MM 个用空格隔开的整数,为稳定后的矩阵。

样例输入 1

2 2
1 2
3 4

样例输出 1

1
2 2
2 2

样例1解释

初始矩阵:

[1234]\begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix}

每个位置有效窗口都包含全部4个数字,总和 1+2+3+4=101+2+3+4=10,平均值 10÷4=2.510 \div 4 = 2.5,向下取整为 22。 第一次平滑后矩阵全为 22,和原矩阵不同,迭代次数记1; 再次平滑全2矩阵结果不变,达到稳定,最终迭代次数为1。

样例输入 2

3 3
1 2 1
2 9 2
1 2 1

样例输出 2

2
2 2 2
2 2 2
2 2 2

样例2解释

第1轮平滑后矩阵:

$$\begin{bmatrix} 3 & 2 & 3 \\ 2 & 2 & 2 \\ 3 & 2 & 3 \end{bmatrix} $$

与原矩阵不一致,迭代计数+1; 第2轮平滑后所有元素变为2,得到全2矩阵;再次平滑无变化,稳定,总迭代次数为2。

样例输入 3

1 1
42

样例输出 3

0
42

样例3解释

仅单个元素,3×3窗口只有自身,平滑后数值不变,初始即稳定,迭代次数为0。

数据范围与约束

参数 取值范围
N,MN,M 1N,M1001 \le N,M \le 100
矩阵元素 0Ai,j2550 \le A_{i,j} \le 255
最大迭代轮数 不超过 1000,实际收敛速度很快
时间上限 O(N×M×迭代次数×9)O(N \times M \times 迭代次数 \times 9),最大运算量约 9×1079 \times 10^7,可正常通过时限