开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第3天,点击查看活动详情
题目链接
题目
原题目太长了并且有很多不重要的东西,我节选了一部分比较关键的内容粘贴在下面。
题目大意
在一个区域里有若干个细胞,细胞只会出现在整点上,细胞和周围的细胞八连通。最初 时全场有若干个细胞,有以下规则:
- 如果时刻 一个细胞周围的细胞数量不超过 1,在 时刻它将会因为孤独而死。
- 如果时刻 一个细胞周围的细胞数量不小于 4,在 时刻它将会因为拥挤而死。
- 如果时刻 一个空点周围的细胞数量恰等于 3,在 时刻该点将会产生一个新细胞。
- 如果时刻 一个细胞周围的细胞数量是 2 或者 3,在 时刻它将会保持存活。
要求构造一个初始状态,使得时刻 存在细胞存活,时刻 不存在细胞存活。构造的所有细胞的坐标在 1 到 300 之间。
思路
如果我们的构造中出现新生的细胞,我们的问题规模就会急剧扩大,难以解决,所以我们应该避免出现一个空地与恰好三个细胞相邻的情况。
按照上述思路,容易发现我们只需要构造一系列斜着排列的点,即可满足要求:
- 每一时刻两端的点只与 1 个点相邻,会因为孤独而消失。
- 每一时刻除了两端之外的其他节点与 2 个点相邻,将会保持存活。
- 没有空地与恰好三个点相邻,不会产生新的细胞。
所以只需要从 1 循环到 输出 即可。
代码
#include <bits/stdc++.h>
using namespace std;
int n;
int main()
{
scanf("%d",&n);
printf("%d\n",2*n);
for(int i=1;i<=2*n;i++)
{
printf("%d %d\n",i,i);
}
return 0;
}