40求助
查看原帖
40求助
352963
sehunnnn1楼主2020/10/22 20:34
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<queue>
using namespace std;
const int N=1600;
char a[N][N];
int s[N];
int n,m,w;
int xx[9]={0,0,-1,-1,+1,+1,+0,1,-1};
int yy[9]={0,1,+1,-1,-1,+1,-1,0,0};
int pan(int x,int y)
{
	if(x>n||y>m||x<1||y<1||a[x][y]!='*') return 0;
	else return 1;
}

int search(int x,int y)
{
	w++;
	a[x][y]='.';
	for(int i=1;i<=8;i++)
	{
		int dx=x+xx[i],dy=y+yy[i];
		if(pan(dx,dy)) search(dx,dy);
	}
	return w;
}
int sum,maxx=-10000000,o,q=1;
int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++) cin>>a[i][j];
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			if(a[i][j]=='*')
			{
				sum++;
				s[sum]=search(i,j);
			} 
		}
	}

	sort(s+1,s+1+sum);
	for(int i=1;i<=sum;i++)
	{
		if(s[i+1]==s[i]) o+=s[i];
		else
		{
			q++;
			maxx=max(maxx,o+s[i]);
			o=0;
		}
	}
	cout<<q-1<<" "<<maxx;
	return 0;
}
2020/10/22 20:34
加载中...