细胞游戏
题号:NC54248
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

给定一个 m × n 个格子的二维面板,每一个格子都可以看成是一个细胞。每个细胞具有一个初始状态, 1 即为活细胞, 0 为死细胞。每个细胞与其八个相邻位置(水平,垂直,对角线)的细胞都遵循以下四条生存定律:

1.如果活细胞周围八个位置的活细胞数少于两个,则该位置活细胞死亡;
2.如果活细胞周围八个位置有两个或三个活细胞,则该位置活细胞仍然存活;
3.如果活细胞周围八个位置有超过三个活细胞,则该位置活细胞死亡;
4.如果死细胞周围正好有三个活细胞,则该位置死细胞复活;

根据当前状态,写一个程序来计算面板上细胞的下 q 个(q 次更新后的)状态。下一个状态是通过将上述规则同时应用于当前状态下的每个细胞所形成的,其中细胞的出生和死亡是同时发生的。

面板上所有格子需要同时被更新,你不能先更新某些格子,然后使用它们的更新后的值再更新其他格子。 


输入描述:

第一行给出 m,n,q 空格分隔
接下来给出 m 行,每行 n 个的二维面板

输出描述:

输出 q 次更新后面板上所有细胞的状态
示例1

输入

复制
4 3 1
0 1 0
0 0 1
1 1 1
0 0 0

输出

复制
0 0 0
1 0 1
0 1 1
0 1 0