【模拟】Biotech
生活随笔
收集整理的這篇文章主要介紹了
【模拟】Biotech
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Biotech
題目大意:
有一堆細胞(放電或不放電),當周圍細胞放電個數小于2或大于3時(八個方向),此細胞變為不放電,當周圍細胞放電個數為2時,此細胞不變,當周圍細胞放電個數為3時,此細胞變為放電
原題:
題目描述
Bob 發現了一群有趣的細胞。
這群細胞排列成一個 n × m 的矩陣。每個細胞有兩個狀態:放電狀態和平靜
狀態。它們每秒鐘都會按以下的規則轉換狀態:
首先我們定義,一個細胞的鄰居為它周圍的 8 個細胞。同時設 k 為某一個細
胞的處于放電狀態的鄰居的個數。
若 k < 2,則這個細胞在下一秒因電量不足而變為/保持平靜狀態。
若 k = 2,則這個細胞在下一秒保持原來的狀態。
若 k = 3,則這個細胞在下一秒因得到充足的電量而變為/保持放電狀態。
若 k > 3,則這個細胞在下一秒因過載而變為/保持平靜狀態。
Bob 觀察了這些細胞現在所處于的狀態。他想預測 t 秒后這些細胞的狀態。
輸入
第一行 3 個正整數 n, m, t。
接下來 n 行,每行一個長度為 m、只包含 01 的字符串,表示每個細胞的初
始狀態。‘1’ 表示放電狀態,‘0’ 表示平靜狀態。
輸出
輸出 n 行,每行一個長度為 m、只包含 01 的字符串,表示每個細胞的 t 秒
后的狀態。‘1’ 表示放電狀態,‘0’ 表示平靜狀態。
輸入樣例
4 4 4 0100 0010 1110 0000輸出樣例
0000 0010 0001 0111說明
對于 100% 的數據,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]];//尋找周圍細胞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);} }總結
以上是生活随笔為你收集整理的【模拟】Biotech的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【结论】Array
- 下一篇: BBC 纪录片《地球脉动 III》即将上