酷暑一夏1

不忘初心,方得始终


Vijos1415 生命游戏 题解

题目

生命游戏(Game of life)由英国数学家John Conway在1970年发明。事实上,它是一个“零人游戏”,也没有胜负之分,而是相当于一个确定性自动机。
游戏在N×M的细胞组成的矩阵里进行,每个细胞每个时刻的状态可能是“存活”或者“休眠”两种,细胞矩阵的状态会按以下规则进行演化:
一个存活状态的细胞,在某一秒,若周围的存活状态的细胞数目不足两个,则下一秒将由于孤独而进入休眠状态。
一个存活状态的细胞,在某一秒,若周围的存活状态的细胞数目超过三个,则下一秒将由于过度拥挤而进入休眠状态。
一个存活状态的细胞,在某一秒,若周围的存活状态的细胞数目为两或三个,则下一秒将继续保持存活状态。
一个休眠状态的细胞,在某一秒,若周围的存活状态的细胞数目为正好三个,则认为是比较适合生存的状态,将于下一秒进入存活状态。
这里“周围”的范围包括一个细胞的上、下、左、右、左上、左下、右上、右下的细胞,如果存在的话。
现在,给定一个初始状态(即第1秒时的状态),请按照规则计算第T秒时的状态。

题解

模拟,注意状态的有效期及输入的一些坑即可。
p.s. 这是去年的WA代码改的,因此一些编码习惯与现在的不同。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include<stdio.h>
char a[1005][1005],b[1005][1005];
int main()
{
int m,n,t,s;
scanf("%d %d %d",&m,&n,&t);
for(int i=1;i<=n;i++)
{
scanf("%s",a[i]+1);
}
for(int k=1;k<t;k++)
{
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
b[i][j]=a[i][j];
s=0;
if(a[i+1][j]=='1') s++;
if(a[i-1][j]=='1') s++;
if(a[i][j+1]=='1') s++;
if(a[i][j-1]=='1') s++;
if(a[i+1][j+1]=='1') s++;
if(a[i+1][j-1]=='1') s++;
if(a[i-1][j-1]=='1') s++;
if(a[i-1][j+1]=='1') s++;
if(a[i][j]=='1')
if(s<2 || s>3)
{
b[i][j]='0';
continue;
}
if(a[i][j]=='0')
if(s==3)
{
b[i][j]='1';
continue;
}
}
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
a[i][j]=b[i][j];
}
for(int i=1;i<=n;i++)
printf("%s\n",a[i]+1);
return 0;
}
最近的文章

Vijos1070 新年趣事之游戏 题解

题目xiaomengxian的哥哥是一个游戏迷,他喜欢研究各种游戏。这天,xiaomengxian到他家玩,他便拿出了自己最近正在研究的一个游戏给xiaomengxian看。这个游戏是这样的:一个国家有N个城市,有些城市之间可以建设铁路,并且不同城市之间建设铁路的费用各不相同。问如何用最小的费用,使 …

于  Vijos, 新年趣事系列 继续阅读
更早的文章

Vijos1219 拉面之窗 题解

题目为了高效地管理拉面店,Dennis给拉面店配了台电脑……在一个春暖花开, 阳光明媚的上午, Dennis兴致勃勃地来到自己的拉面馆视察工作,突然他发现大徒弟光光在电脑上做Vijos的题目(原来拉面店里也卧虎藏龙),但光光总是开了一个题目看了一半,又马上打开另一个看看(难道题目太easy了,不屑于 …

于  Vijos, 拉面与信息学 继续阅读