玄关蒟蒻求助!橙题两个样例全过但是WA
查看原帖
玄关蒟蒻求助!橙题两个样例全过但是WA
723205
xjsmsms楼主2024/8/18 23:21

提交记录

#include <bits/stdc++.h>
#define rep(i,a,n) for(register int i = (a);i<=(n);++i)

using namespace std;
const int N = 510;
const int dx[4]={0,0,-1,1},
		  dy[4]={-1,1,0,0};
		  
int n,m;
int a[N][N];
bool check(int x,int y){
	if(a[x+1][y] == 0&&a[x-1][y]==0&&a[x][y+1]==0&&a[x][y-1] == 0){
		return 1;
	}else{
		return 0;
	}
}
void dfs(int x,int y){
	if(a[x][y]!=0&&!check(x,y)){
		a[x][y] = 3;	
	}
	for(int i=0;i<4;++i){
		int xx = x+dx[i];
		int yy = y+dy[i];
		
		if(xx>=1&xx<=n&&yy>=1&&yy<=m&&a[xx][yy] == 1&&!check(xx,yy)){
			a[xx][yy] = 3;
			dfs(xx,yy);
		}
	}
}
signed main(){
	cin >>n>>m;
	for(int i = 1;i<=n;++i){
		for(int j = 1;j<=m;++j){
			char c;
			cin >>c;
			if(c == '*'){
				a[i][j] = 0;
			}else{
				a[i][j] = 1;
			}
		}
	}	
	for(int i = 1;i<=n;++i){
		dfs(1,i);
		dfs(n,i);
	}
	for(int i =1;i<=m;++i){
		dfs(1,i);
		dfs(m,i);
	}
	

	int ans = 0;
	for(int i =1 ;i<=n;++i){
		for(int j =1;j<=m;++j){
			if(a[i][j]==1) ++ans;
		}
	}
	cout <<ans;
	return 0;
}

2024/8/18 23:21
加载中...