ight题目大意:给出一个n*m的矩阵,其中有一些是空格,有一些是障碍,问由空格组成的面积最大的矩阵是多少,输出时要乘于3
解题思路:设置三个数组,left,数组记录能和该点组成矩阵的最左边的点,right数组记录能和该点组成矩阵的最右边的点,up数组记录该点的高度,这样矩阵的面积就等于(right - left) * up
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define maxn 1010
int left[maxn], right[maxn], up[maxn];
char str[maxn];
int main() {
int test, m, n;
char ch;
scanf("%d",&test);
while(test--) {
scanf("%d%d",&m, &n);
int ans = 0;
for(int i = 0; i < m; i++) {
for(int j = 0; j < n; j++) {
ch = getchar();
while(ch != 'R' && ch != 'F')
ch = getchar();
str[j] = ch;
}
int lo = -1, ro = n;
for(int j = 0; j < n; j++) {
if(str[j] == 'R') {
up[j] = left[j] = 0;
lo = j;
}
else {
up[j] = (i == 0 ? 1:up[j] + 1);
left[j] = (i == 0 ? lo+1:max(left[j], lo+1));
}
}
for(int j = n - 1; j >= 0; j--) {
if(str[j] == 'R') {
right[j] = n;
ro = j;
}
else {
right[j] = (i == 0 ? ro - 1: min(right[j],ro-1));
ans = max(ans,up[j] * (right[j] - left[j] + 1));
}
}
}
printf("%d\n",ans * 3);
}
return 0;
}