70 分;马蜂优秀;求调
查看原帖
70 分;马蜂优秀;求调
667250
Xiphi楼主2024/3/16 16:25
#include<bits/stdc++.h>
#define _for(i,x,y) for(int i=x;i<=y;++i)
#define _rep(i,x,y) for(int i=x;i<y;++i)
#define _ref(i,x,y) for(int i=y;i>=x;--i)
using namespace std;
int down[205][205],L[205][205],n,m;
int mp[205][205];
int Isd[205][205][205];
int main(){
	cin>>n>>m;
	_for(i,1,n){
		_for(j,1,m){
			char c;
			cin>>c;
			if(c=='X') mp[i][j]=1;
			else mp[i][j]=0;
		}
	}
	for(int i=n;i>=1;--i){
		_for(j,1,m){
			if(!mp[i][j])down[i][j]=down[i+1][j]+1;
		}
	}
	_for(i,1,n){
		_for(j,1,m){
			if(!mp[i][j])
				 L[i][j]=L[i][j-1]+1;
		}
	}
	_for(i,1,n){
		_for(j,1,m){
			int t=i;
			while(t+1<=n){
				t++;
				if(mp[t][j]) break;
				Isd[i][j][L[t][j]]=t;
			}
			_ref(k,1,max(n,m)){
				Isd[i][j][k]=max(Isd[i][j][k+1],Isd[i][j][k]);
			}
		}
	}
	int ans=0;
	_for(i,1,n){
		_for(j,1,m){
			int t=m+1;
			while(t-1>j){
				t--;
				int val=t-j+1;
				if(L[i][t]>=val)ans=max(ans,val*min(down[i][j],Isd[i][t][val]));
			}
		}
	}
	cout<<ans<<'\n';
	return 0;
}
/*
5 5
X...X
X.X.X
X...X
XXX.X
.XXXX
*/
2024/3/16 16:25
加载中...