P17218 [ICPC 2017 Nanning R] The Game of Life

题目描述

:::align{center} ![](https://cdn.luogu.com.cn/upload/image_hosting/lmfij6dq.png) ::: 从进化基因的视角来看,基因是永生的,而我们作为人类个体的角色——生命的意义——在于延续基因。在数百年后,我们作为人类个体存在的所有痕迹、关于我们的记忆、我们所有的成就,很可能都将消失并被遗忘,唯有那些通过世代繁衍成功传递下来的基因得以留存。 当然,我们并非从基因的进化视角来体验世界,但 **生命游戏** 正是如此。生命游戏的宇宙是一个无限大的二维正交网格,由正方形细胞构成。每个细胞处于两种状态之一:存活或死亡。每个细胞与它的八个邻居(水平、垂直或对角线相邻的细胞)发生交互。在每个时间步中,发生以下变迁: - 任何存活的细胞,若其存活邻居少于两个,则死亡,如同因人口过少而死。 - 任何存活的细胞,若其存活邻居为两个或三个,则存活至下一代。 - 任何存活的细胞,若其存活邻居多于三个,则死亡,如同因人口过多而死。 - 任何死亡的细胞,若其存活邻居恰好为三个,则变为存活细胞,如同通过繁殖而生。 初始模式,即第 $0$ 代,由无限网格中的一个有限 $N \times M$ 区域给出,其中 $N \le 3$,$M \le 5$。这意味着任何其他格子的状态均为死亡。 基因进化是生物生命的意义所在,既是其原因与方式,也是未来生物存在的储备。游戏中的三位一体生命要求你找出以下三个问题的答案。 - 在前 $321$ 代中(包括第 $0$ 代),哪一代的种群数量达到最大? - 这个最大值是多少? - 第 $321$ 代的种群数量是多少?

输入格式

输入的第一行包含一个整数 $t$ ($1 \le t \le 300$),表示测试用例的个数。 每个测试用例由若干行组成。第一行包含两个正整数 $N$ 和 $M$。接下来的 $N$ 行,每行包含一个长度为 $M$ 的字符串,对应初始模式。我们用 “#” 描述一个存活的细胞,用 “.” 描述一个死亡的细胞。

输出格式

对于每个测试用例,在一行中输出三个整数 $a$、$b$ 和 $c$,其中 $a$ 表示达到最大种群数量的那一代,$b$ 是该代的种群数量,$c$ 是第 $321$ 代的种群数量。如果存在多个世代达到最大种群数量,选择最小的 $a$ 输出。

说明/提示

翻译由 DeepSeek V4 Pro 完成