ABC 351 D
  • 板块学术版
  • 楼主HeYilin
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/4/27 22:11
  • 上次更新2024/4/28 12:55:10
查看原帖
ABC 351 D
728459
HeYilin楼主2024/4/27 22:11

样例过,WA * 37

https://atcoder.jp/contests/abc351/submissions/52880799

#include<bits/stdc++.h>
typedef long long int ll;
using namespace std;
const int maxn=1010,d[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
int n,m,val[maxn][maxn],ans=INT_MIN;
char a[maxn][maxn];
bool vis[maxn][maxn];
struct node{int x,y;};
queue<node>q;
int bfs(int xx,int yy){
//	cout<<"---------\n";
//	cout<<xx<<" "<<yy<<"\n";
	while(q.size())q.pop();
	int step=1,sum=val[xx][yy];
	q.push({xx,yy});
	vis[xx][yy]=1;
	while(!q.empty()){
		int x=q.front().x,y=q.front().y;
		q.pop();
		for(int i=0;i<4;i++){
			int dx=x+d[i][0],dy=y+d[i][1];
			if(dx>=1&&dx<=n&&dy>=1&&dy<=m&&!vis[dx][dy]&&val[dx][dy]){
				step++,sum+=val[dx][dy],vis[dx][dy]=1;
				q.push({dx,dy});
//				cout<<dx<<" "<<dy<<"\n";
			}
		}
	}
//	cout<<"sum : "<<sum<<" step : "<<step<<"\n";
	return sum-step;
}
int main(){
	memset(vis,0,sizeof(vis));
	cin>>n>>m;
	for(int i=0;i<=n+1;i++){
		for(int j=0;j<=m+1;j++)a[i][j]='.';
	}
	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]=='#')val[i][j]=0;
			else{
				if(a[i-1][j]!='#'&&a[i+1][j]!='#'&&a[i][j-1]!='#'&&a[i][j+1]!='#'){
					val[i][j]=4;
					if(i==1||i==n)val[i][j]--;
					if(j==1||j==m)val[i][j]--;
				}
			}
		}
	}
//	for(int i=1;i<=n;i++){
//		for(int j=1;j<=m;j++)cout<<val[i][j]<<" ";cout<<"\n";
//	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			if(!vis[i][j]&&val[i][j])ans=max(ans,bfs(i,j));
		}
	}
	cout<<max(1,ans);
	return 0;
}
/*
3 3
..#
#..
..#

*/

/*
3 5
.#...
.....
.#..#

00032
30440
00000

*/
2024/4/27 22:11
加载中...