Official

B - Futon Editorial by tozangezan


全てのマスに対して、「今いるマスとその右マスがともに空いているなら +1」「今いるマスとその下マスがともに空いているなら +1」とすることで、全ての布団の置ける場所を重複なく数えることができます。

ただし、配列外参照に気をつけましょう。一番下の行にあるマスは、それより下のマスが存在しないので「今いるマスとその下マスがともに空いているなら +1」で +1 されないように気をつける必要があります。ただし、一番下の行にあるマスでも「今いるマスとその右マスがともに空いているなら +1」は成り立つことがあります。

C++ による実装例

#include<stdio.h>
char in[110][110];
int main(){
	int a,b;scanf("%d%d",&a,&b);
	for(int i=0;i<a;i++){
		scanf("%s",in[i]);
	}
	int ret=0;
	for(int i=0;i<a;i++)for(int j=0;j<b;j++){
		if(i+1<a&&in[i][j]==in[i+1][j]&&in[i][j]=='.')ret++;
		if(j+1<b&&in[i][j]==in[i][j+1]&&in[i][j]=='.')ret++;
	}
	printf("%d\n",ret);
}

posted:
last update: