kmjp's blog

競技プログラミング参加記です

UnKoder #03 : Mine Number

UnKoder #03に参加。何とか全完したもののミスしまくり。
難易度はA<C<B<Dでした。
https://www.hackerrank.com/contests/unkoder-03/challenges/mine-number

問題

マインスイーパにおける爆弾の位置が与えられる。
爆弾に隣接(斜め含む)する空マスに周囲の爆弾の数を埋めよ。

解法

周囲8マスを見るだけ。

int H,W;
string S[100];

void solve() {
	int i,j,k,l,r,x,y; string s;

	cin>>H>>W;
	FOR(y,H) cin>>S[y];
	FOR(y,H) {
		FOR(x,W) if(S[y][x]=='.') {
			S[y][x]='0';
			for(int tx=x-1;tx<=x+1;tx++) for(int ty=y-1;ty<=y+1;ty++)
				if(tx>=0 && tx<W && ty>=0 && ty<H && S[ty][tx]=='#') S[y][x]++;
			if(S[y][x]=='0') S[y][x]='.';
		}
	}
	FOR(y,H) cout << S[y]<<endl;
	
}

まとめ

これは典型的なやるだけ問題だと思うが、1問目とはいえなぜこれを選んだのだろう?