不开 02会re第十个点,开了会T....
查看原帖
不开 02会re第十个点,开了会T....
423270
l17663843890楼主2021/5/6 21:28
#include <bits/stdc++.h>
using namespace std;
long long  vis[2000][2000],cnt,n,color,ans;
char mp[2000][2000];
int dx[4]={-1,1,0,0};
int dy[4]={0,0,-1,1};
struct node
{
	int x,y;
};
struct ice
{
	int size,lc;
}awr[2000];
void bfs(int x,int y)
{	cnt=ans=0;
	queue<node> q;
	node a={x,y};
	q.push(a);
	vis[x][y]=color;
	while(!q.empty())
	{	
		node k=q.front();
		q.pop();
		cnt++;
		for(int i=0;i<4;i++)
		{
			int fx=k.x+dx[i];
			int fy=k.y+dy[i];
			if(!vis[fx][fy]&&fx>=1&&fx<=n&&fy>=1&&fy<=n&&mp[fx][fy]=='#')
			{	
				vis[fx][fy]=color;
				node p={fx,fy};
				q.push(p);
			}
			else if(mp[fx][fy]=='.')
			ans++;
		}
	}
}
bool cmp(ice a,ice b)
{
    if(a.size>b.size)
        return true;
    else if(a.size<b.size)
        return false;
    else if(a.lc>b.lc)
        return false;
    else
        return true;
}
main()
{
	cin>>n;
	for(int i=0;i<=n+1;i++)
	for(int j=0;j<=n+1;j++)
	mp[i][j]='.';
	
	for(int i=1;i<=n;i++)
	for(int j=1;j<=n;j++)
	cin>>mp[i][j];
	for(int i=1;i<=n;i++)
	for(int j=1;j<=n;j++)
	{
		if(!vis[i][j]&&mp[i][j]!='.')
		{
			color++;
			bfs(i,j);
			awr[color].size=cnt;
			awr[color].lc=ans;
		}
	}

	sort(awr,awr+color+1,cmp);
	printf("%d %d",awr[0].size,awr[0].lc);
}
2021/5/6 21:28
加载中...