0分
查看原帖
0分
1039717
Andy_hpy楼主2024/10/21 20:34
#include <bits/stdc++.h>
#include <unistd.h>
using namespace std;
typedef long long ll;
typedef double db;
typedef long double ldb;
const ll MAXN=1505;
char a[MAXN][MAXN];
ll n,m,ans,maxans;
const ll dir[][2]={{1,0},{0,1},{-1,0},{0,-1},{1,1},{-1,-1},{1,-1},{-1,1}};
bool b[100005];
struct Item{
	ll x;
	ll y;
};
void bfs(ll x,ll y){
	ll sum=0;
	queue<Item>q;
	q.push({x,y});
	a[x][y]='.';
	while(!q.empty()){
		Item curr=q.front();
		q.pop();
		if(curr.x<=n&&curr.y<=m&&curr.x>=1&&curr.y>=1)++sum;
		for(ll i=0;i<8;++i){
			ll nx=curr.x+dir[i][0],ny=curr.y+dir[i][1];
			if(a[nx][ny]=='.'){
				continue;
			}
			q.push({nx,ny});
			a[nx][ny]='.';
		}
	}
	if(b[sum]==false){
		++ans;
		b[sum]=true;
	}
	maxans=max(maxans,sum);
}
int main() {
	memset(a,'.',sizeof(a));
	cin>>n>>m;
	for(ll i=1;i<=n;++i){
		cin>>(a[i]+1);
	}
	for(ll i=1;i<=n;++i){
		for(ll j=1;j<=m;++j){
			if(a[i][j]=='.')continue;
			bfs(i,j);
		}
	}
	cout<<ans<<" "<<maxans<<endl;
	return 0;
}
2024/10/21 20:34
加载中...