PKU演習問メモ(10/24)
No. | 問題名 | 問題の種類および解法 | 難易度 |
---|---|---|---|
1120 | A New Growth Industry | シミュレーション | ★☆☆☆☆ |
1120 A New Growth Industry
問題概要
mxnのグリッドの各セルに生物がいる。
各生物の密集度は0〜3の整数で表現され、
セルの次の時刻の密集度は、そのマスの周囲4マスの密集度の合計により決まる。
すなわち周囲4マスの密集度をaとすると次の密集度はD[a]だけ増減する。
Dおよび最初の各マスの密集度が与えられたとき、時間tでのグリッドの状態を出力せよ。
解法
ライフゲームの要領でシミュレートすればよい。
ソースコード
char *ch=".!X#"; int dx[]={-1,0,1,0,0},dy[]={0,-1,0,1,0}; int n,d[16]; int m[20][20]; void move() { int p[20][20]; rep(i,20)rep(j,20)p[i][j]=m[i][j]; rep(i,20)rep(j,20) { int c=0; rep(k,5) { int y=i+dy[k],x=j+dx[k]; if(y<0||y>19||x<0||x>19)continue; c+=p[y][x]; } m[i][j]=max(min(m[i][j]+d[c],3),0); } } int main() { scanf("%d",&n); rep(i,16)scanf("%d",d+i); rep(i,20)rep(j,20)scanf("%d",m[i]+j); rep(i,n)move(); rep(i,20)rep(j,21)putchar(j==20?'\n':ch[m[i][j]]); return 0; }