传送门:
自己弱当然得YM题解……
Code:
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e3+10;
int a[maxn][maxn];
int n,m,h[maxn][maxn];
int l[maxn][maxn],r[maxn][maxn],L[maxn][maxn],R[maxn][maxn];
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
char c=getchar();
while(c!='R'&&c!='F')c=getchar();
a[i][j]=c=='F';
}
for(int i=1;i<=n;i++){
int t=0;
for(int j=1;j<=m;j++)
if(a[i][j])l[i][j]=t;
else L[i][j]=0,t=j;
t=m+1;
for(int j=m;j>=1;j--)
if(a[i][j])r[i][j]=t;
else R[i][j]=m+1,t=j;
}
for(int i=1;i<=m+1;i++)R[0][i]=m+1;
int ans=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
if(a[i][j]){
h[i][j]=h[i-1][j]+1;
L[i][j]=max(l[i][j]+1, L[i-1][j]);
R[i][j]=min(r[i][j]-1, R[i-1][j]);
ans=max((R[i][j]-L[i][j]+1)*h[i][j], ans);
}
}cout<<3*ans<<endl;
return 0;
}