RE求助
查看原帖
RE求助
939658
Rqc666楼主2024/12/14 20:59
#include <bits/stdc++.h>

using namespace std;

long long n,m,w,sum;
long long x,y,k[1505];
char mp[1505][1505];  
bool vis[1505][1505],f = 1; 
int px[100], py[100];
long long max_,p;
//int dx[4] = {0, 1, 0, -1}; 
//int dy[4] = {1, 0, -1, 0};
int dx[8] = {0, 1, 1, 1, 0, -1, -1, -1}; //°Ë·½ÏòµÄ·½ÏòÊý×é
int dy[8] = {1, 1, 0, -1, -1, -1, 0, 1};
//int dx[8] = {-2, -1, 1, 2, 2, 1, -1, -2}; //Âí×ßÈյķ½ÏòÊý×é 
//int dy[8] = {1, 2, 2, 1, -1, -2, -2, -1};
//ÈýάÁù·½ÏòµÄ·½ÏòÊý×é 
bool in(int xx, int yy) {   //ÅжÏÊÇ·ñÔ½½çµÄº¯Êý
	return xx>=1&&xx<=n&&yy>=1&&yy<=m;
} 
void dfs(int x, int y)
{
	int nx,ny;
	k[w]++;
//	cout<<k[w]<<" ";
	mp[x][y] = '.';
	for(int i = 0; i < 8; i++)
	{
		nx = x + dx[i];
		ny = y + dy[i];
		if(in(nx, ny) && mp[nx][ny] == '*')
		{
			dfs(nx, ny);
		}
	}
	return ;
} 
int main()
{
	freopen("P6566_5.in","r",stdin);
	freopen("P6566_5.ans","w",stdout);
	cin >> n >> m;
	for(int i = 1;i<=n;i++)
	{
		for(int j = 1;j<=m;j++)
		{
			cin>>mp[i][j];
		}
	}
	for(int i = 1;i<=n;i++)
	{
		for(int j = 1;j<=m;j++)
		{
			if(mp[i][j] == '*')
			{
				w++;
				dfs(i,j);
			}
		}
	}
	sort(k + 1,k + w + 1,greater<int>());
	for(int i = 1;i<=w;i++) cout<<k[i]<<" ";
	cout<<"\n";
	for(int i = 1;i<w;i++)
	{
		if(k[i] != k[i + 1])
		{
			max_ = max((p + 1) * k[i],max_);
			sum++;
			p = 0;
		}
		else
		{
			p++;
		}
		if(i + 1 == w)
		{
			max_ = max((p + 1) * k[i + 1],max_);
			sum++;
		}
	}
	cout<<sum<<" "<<max_;
	return 0;
}
2024/12/14 20:59
加载中...