Biotech_模拟
来源:互联网 发布:java如何发送短信 编辑:程序博客网 时间:2024/06/05 02:42
题目描述
Bob 发现了一群有趣的细胞。
这群细胞排列成一个n m 的矩阵。每个细胞有两个状态:放电状态和平静
状态。它们每秒钟都会按以下的规则转换状态:
首先我们定义,一个细胞的邻居为它周围的8 个细胞。同时设k 为某一个细
胞的处于放电状态的邻居的个数。
若k < 2,则这个细胞在下一秒因电量不足而变为/保持平静状态。
若k = 2,则这个细胞在下一秒保持原来的状态。
若k = 3,则这个细胞在下一秒因得到充足的电量而变为/保持放电状态。
若k > 3,则这个细胞在下一秒因过载而变为/保持平静状态。
Bob 观察了这些细胞现在所处于的状态。他想预测t 秒后这些细胞的状态。
思路
题目数据只有100,就是说O(n^3)都不会爆
所以直接上暴力就可以了
这里采用了一种神奇的方法解决数组互换的问题,跑得飞快
#include <stdio.h>#include <string>#define maxn 102using namespace std;int a[maxn][maxn][3];int chack(int x, int y, int l){ int ans = 0; if (a[x-1][y][l] == 1) ans ++; if (a[x][y-1][l] == 1) ans ++; if (a[x-1][y-1][l] == 1) ans ++; if (a[x+1][y][l] == 1) ans ++; if (a[x][y+1][l] == 1) ans ++; if (a[x+1][y+1][l] == 1) ans ++; if (a[x-1][y+1][l] == 1) ans ++; if (a[x+1][y-1][l] == 1) ans ++; return ans;}int main(){ freopen("biotech.in", "r", stdin); freopen("biotech.out", "w", stdout); int n, m, t; scanf("%d%d%d", &n, &m, &t); t++; for (int i = 1; i <= n; i ++) for (int j = 1; j <= m; j ++) { char ch = getchar(); while (ch != '0' && ch != '1') ch = getchar(); if (ch == '1') a[i][j][1] = 1; } int x = 2, y = 1; for (int o = 2; o <= t; o ++) { int xx = x; x = y; y = xx; for (int i = 1; i <= n; i ++) for (int j = 1; j <= m ;j ++) { int k = chack(i, j, x); if (k < 2 || k > 3) a[i][j][y] = 0; else if (k == 3) a[i][j][y] = 1; else if (k == 2) a[i][j][y] = a[i][j][x]; } } for (int i = 1; i <= n; i ++) { for (int j = 1; j <= m; j ++) printf("%d", a[i][j][y]); printf("\n"); }}
阅读全文
1 1
- Biotech_模拟
- 模拟
- 模拟
- 模拟
- 模拟
- 模拟
- 模拟
- 模拟
- 模拟
- 模拟
- 模拟:
- 模拟
- 模拟
- 模拟
- 模拟
- 模拟
- 模拟
- 模拟
- Java 注解知识点
- android查看签名文件命令
- 基于 Token 的身份验证方法(流程)
- easy_install 和 pip
- python中出现IndentationError:unindent does not match any outer indentation level是什么问题?
- Biotech_模拟
- Git Push 避免用户名和密码方法
- 插入排序
- Android面试题-机型适配之痛,例如三星、小米、华为、魅族等。
- 算法导论 练习题 15.1-4
- 804A
- Nginx版本升级记
- 【设计模式】让设计模式连接生活
- windows下“gitk代码中文注释乱码”