#dxy26004. 矩阵平滑稳定
矩阵平滑稳定
当前没有测试数据。
题目描述
给定一个 N 行 M 列的整数矩阵 A(元素范围 [0, 255]),对其进行迭代平滑处理,直到矩阵达到稳定状态。
平滑操作:对于每个位置 (i, j),将其替换为以 (i, j) 为中心的 3×3 窗口内所有元素的平均值(向下取整)。如果窗口超出矩阵边界,只取窗口与矩阵交集内的元素。
收敛条件:对矩阵所有位置施加一次平滑操作后,如果得到的新矩阵与原矩阵完全相同(即每个位置的值都不再变化),则认为矩阵已稳定,停止迭代。
请输出:
- 达到稳定状态所需的迭代次数。
- 最终的稳定矩阵。
输入格式
第一行:两个整数 N 和 M(1 ≤ N, M ≤ 100)
接下来 N 行,每行 M 个整数,表示矩阵元素(0 ≤ Aᵢⱼ ≤ 255)
输出格式
第一行:一个整数,表示迭代次数。
接下来 N 行,每行 M 个整数(空格分隔),表示最终的稳定矩阵。
样例
样例1:
输入:
2 2
1 2
3 4
输出:
1
2 2
2 2
解释:
初始矩阵:
1 2
3 4
四个位置都只有完整的 2×2 窗口:
平均值 = (1+2+3+4)/4 = 10/4 = 2.5 → floor = 2
新矩阵全部为 2,与原矩阵不同(迭代1次)。
再次平滑:全是 2 的矩阵平滑后仍全是 2,稳定。
因此迭代 1 次后稳定,最终矩阵全 2。
样例2:
输入:
3 3
1 2 1
2 9 2
1 2 1
输出:
2
2 2 2
2 2 2
2 2 2
解释:
第 1 次迭代:
四角 (0,0),(0,2),(2,0),(2,2):窗口 2×2
(0,0): floor((1+2+2+9)/4) = floor(14/4) = 3
四边中点 (0,1),(1,0),(1,2),(2,1):窗口 2×3 或 3×2
(0,1): floor((1+2+1+2+9+2)/6) = floor(17/6) = 2
中心 (1,1):完整 3×3
(1,1): floor((1+2+1+2+9+2+1+2+1)/9) = floor(21/9) = 2
得到:
3 2 3
2 2 2
3 2 3
第 2 次迭代:
以上矩阵再平滑,所有值都变为 2,得到全 2 矩阵。
再次平滑仍全 2,稳定。
迭代 2 次后稳定。
样例3:
输入:
1 1
42
输出:
0
42
解释:
1×1 矩阵不需要平滑(窗口就是自己,avg = 42/1 = 42,不变)。
初始即为稳定,迭代 0 次。
数据范围与约束
| 参数 | 范围 |
|---|---|
| N, M | 1 ≤ N, M ≤ 100 |
| 元素值 | 0 ≤ Aᵢⱼ ≤ 255 |
| 最大迭代次数 | 不超过 1000(实际上收敛很快) |
| 时间复杂度要求 | O(N × M × 迭代次数 × 9) ≤ O(100×100×1000×9) ≈ 9×10⁷,可通过 |