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;
}