题目背景
2020年4月11日,英国数学家 约翰·霍顿·康威(John Horton Conway)因为新型冠状病毒肺炎不幸逝世。他在群论、数论、代数、几何拓扑、理论物理、组合博弈论和几何等领域,都做出了重大贡献。他的离去是人类文明的损失。他最著名的发明就是生命游戏(Conway’s Game of Life)。
题目描述
生命游戏定义了一种细胞自动机。该自动机由一个网格组成,每个方格代表一个细胞,细胞有两种状态:生(黑色表示)或死(白色表示)。每个细胞在下个时刻的生死取决于当前时刻相邻的八个细胞的状态,具体规则如下:
- 如果某个原本存活的细胞,周围恰好有 22 个 或 33 个活的细胞,那么在下个时刻,它会保持存活;
- 如果某个原本存活的细胞,周围活的细胞小于 22 个或多于 33 个,那么它在下个时刻,会因孤独或拥挤而死亡;
- 如果某个原本死亡的细胞,周围恰好有 33 个活的细胞,那么在下个时刻,它会变成活的细胞。
利用这些简单的规则,生命游戏将从一个时刻迭代到下一个时刻,呈现不同的演化形态。
第一种是稳定状态,细胞自动机从诞生起,布局稳定,没有任何变化。如下图所示
第二种是振荡状态,细胞自动机反复在几种状态间振荡变化,如下图所示
第三种是消亡状态,细胞自动机逐渐萎缩,如下图所示
细胞自动机还有更多有趣的状态,比如繁衍或者移动,此处就不展开了。
给定一个规模为 n×mn×m 的细胞自动机,请判定它是否处于稳定状态。
输入格式
第一行:两个整数 nn 和 mm;
接下来有 n×mn×m 个字符,表示每个细胞是否存活:
- 若处于存活状态,用
*
表示, - 若处于死亡状态,用
.
表示。
输出格式
若细胞自动机处于稳定状态,输出 Still life
,否则输出 Other
。
数据范围
1≤n,m≤1001≤n,m≤100
样例数据
输入:
4 4
....
.**.
.**.
....
输出:
Still life
输入:
3 4
.**.
*..*
.**.
输出:
Still life
输入:
2 3
...
.*.
输出:
Other
详见代码:
#include<bits/stdc++.h>
using namespace std;
int n,m,a[110][110];char t;
int main()
{cin>>n>>m;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){cin>>t;a[i][j]=(t=='*');}for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){int c=0;for(int x=i-1;x<=i+1;x++)for(int y=j-1;y<=j+1;y++)c+=a[x][y];c-=a[i][j];if(a[i][j]==1&&(c<2||c>3)||a[i][j]==0&&c==3){cout<<"Other";return 0;}}cout<<"Still life";return 0;
}