吸氧后#3,#8 WA求助
查看原帖
吸氧后#3,#8 WA求助
496009
黄舀啊楼主2022/9/6 19:02
#include<iostream>
#include<cstring>
using namespace std;

int n,m,cnt,ans,maxx = -(1<<30),ans_x,ans_y;
char ans_w;
bool mp[155][155][5];
bool vis[155][155];
int k[155][155];
int K[1255];
int xx[] = {-1,1,0,0};
int yy[] = {0,0,-1,1};
inline int read() {
    int x=0,f=1;char ch=getchar();
    while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
    while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
    return x*f;
}
int sum(int x,int y){
//	cout << x << ' ' << y << endl;
	k[x][y] = cnt;
	int ret = 0;
	vis[x][y] = 1;
	ret ++;
	if(!mp[x][y][0] && !vis[x][y-1] && x>=1 && x<=n && y-1>=1 && y-1<=m) ret += sum(x,y-1);
	if(!mp[x][y][1] && !vis[x-1][y] && x-1>=1 && x-1<=n && y>=1 && y<=m) ret += sum(x-1,y);
	if(!mp[x][y][2] && !vis[x][y+1] && x>=1 && x<=n && y+1>=1 && y+1<=m) ret += sum(x,y+1);
	if(!mp[x][y][3] && !vis[x+1][y] && x+1>=1 && x+1<=n && y>=1 && y<=m) ret += sum(x+1,y);
	return ret;
}
//void dfs(int x,int y){
//	if(mp[x][y][0] == 1 && y != 1)
//}

int main(){
	
	cin >> m >> n;
	for(int i=1 ; i<=n ; i++){
		for(int j=1,x ; j<=m ; j++){
			cin >> x;
			if(x&1) mp[i][j][0] = 1;
			if(x&2) mp[i][j][1] = 1;
			if(x&4) mp[i][j][2] = 1;
			if(x&8) mp[i][j][3] = 1;
		}
	}
	memset(vis,0,sizeof vis);
	for(int i=1 ; i<=n ; i++){
		for(int j=1 ; j<=m ; j++){
			if(!vis[i][j]) K[++cnt] = sum(i,j);
			maxx = max(maxx,K[cnt]);
		}
	}
	cout << cnt << endl << maxx << endl;
	for(int i=n ; i>=1 ; i--)
		for(int j=1 ; j<=m ; j++){
			if(i != 1 && mp[i][j][1] == 1 && k[i][j] != k[i-1][j]){
				if(ans < K[k[i][j]] + K[k[i-1][j]]){
					ans = K[k[i][j]] + K[k[i-1][j]];
					ans_x = i;
					ans_y = j;
					ans_w = 'N';
				}
			}
			if(j != m && mp[i][j][2] == 1 && k[i][j] != k[i][j+1]){
				if(ans < K[k[i][j]] + K[k[i][j+1]]){
					ans = K[k[i][j]] + K[k[i][j+1]];
					ans_x = i;
					ans_y = j;
					ans_w = 'E';
				}
			}
		}
	cout << ans << endl << ans_x << ' ' << ans_y << ' ' << ans_w;
	
	return 0;
} 
2022/9/6 19:02
加载中...