【模拟】Biotech
Biotech
題目大意:
有一堆細(xì)胞(放電或不放電),當(dāng)周圍細(xì)胞放電個數(shù)小于2或大于3時(八個方向),此細(xì)胞變?yōu)椴环烹?#xff0c;當(dāng)周圍細(xì)胞放電個數(shù)為2時,此細(xì)胞不變,當(dāng)周圍細(xì)胞放電個數(shù)為3時,此細(xì)胞變?yōu)榉烹?/p>
原題:
題目描述
Bob 發(fā)現(xiàn)了一群有趣的細(xì)胞。
這群細(xì)胞排列成一個 n × m 的矩陣。每個細(xì)胞有兩個狀態(tài):放電狀態(tài)和平靜
狀態(tài)。它們每秒鐘都會按以下的規(guī)則轉(zhuǎn)換狀態(tài):
首先我們定義,一個細(xì)胞的鄰居為它周圍的 8 個細(xì)胞。同時設(shè) k 為某一個細(xì)
胞的處于放電狀態(tài)的鄰居的個數(shù)。
若 k < 2,則這個細(xì)胞在下一秒因電量不足而變?yōu)?保持平靜狀態(tài)。
若 k = 2,則這個細(xì)胞在下一秒保持原來的狀態(tài)。
若 k = 3,則這個細(xì)胞在下一秒因得到充足的電量而變?yōu)?保持放電狀態(tài)。
若 k > 3,則這個細(xì)胞在下一秒因過載而變?yōu)?保持平靜狀態(tài)。
Bob 觀察了這些細(xì)胞現(xiàn)在所處于的狀態(tài)。他想預(yù)測 t 秒后這些細(xì)胞的狀態(tài)。
輸入
第一行 3 個正整數(shù) n, m, t。
接下來 n 行,每行一個長度為 m、只包含 01 的字符串,表示每個細(xì)胞的初
始狀態(tài)。‘1’ 表示放電狀態(tài),‘0’ 表示平靜狀態(tài)。
輸出
輸出 n 行,每行一個長度為 m、只包含 01 的字符串,表示每個細(xì)胞的 t 秒
后的狀態(tài)。‘1’ 表示放電狀態(tài),‘0’ 表示平靜狀態(tài)。
輸入樣例
4 4 4 0100 0010 1110 0000輸出樣例
0000 0010 0001 0111說明
對于 100% 的數(shù)據(jù),1 ≤ n, m ≤ 100, 0 ≤ t ≤ 100。
解題思路:
直接模擬即可
代碼:
#include<cstdio> using namespace std; int n,m,t,sum,a[3][105][105]; int const dx[8]={1,1,0,-1,-1,-1,0,1}; int const dy[8]={0,1,1,1,0,-1,-1,-1}; int read()//讀入 {char x=getchar();while (x!='0'&&x!='1') x=getchar();return x-48; } int main() {scanf("%d %d %d",&n,&m,&t);for (int i=1;i<=n;++i)for (int j=1;j<=m;++j)a[0][i][j]=read();for (int tt=1;tt<=t;++tt)for (int i=1;i<=n;++i)for (int j=1;j<=m;++j){sum=0;for (int k=0;k<8;++k)sum+=a[(tt+1)&1][i+dx[k]][j+dy[k]];//尋找周圍細(xì)胞if (sum<2||sum>3) a[tt&1][i][j]=0;//三種情況if (sum==3) a[tt&1][i][j]=1;if (sum==2) a[tt&1][i][j]=a[(tt+1)&1][i][j];}for (int i=1;i<=n;++i){for (int j=1;j<=m;++j)putchar(a[t&1][i][j]+48);//輸出putchar(10);} }總結(jié)
以上是生活随笔為你收集整理的【模拟】Biotech的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【结论】Array
- 下一篇: 【记忆化搜索】【dfs】【递归】Choc