题目链接
【分析】
这就是悬线法的板子。。。
#include <cstdio>
#include <cstring>
#include <cctype>
#include <algorithm>
using namespace std;
const int N = 1e3 + 10;
int n, m;
int U[N][N], L[N][N], R[N][N];
char c[N][N];
void Read(char &c) {
c = getchar();
while (!isupper(c)) c = getchar();
}
int main() {
// freopen("P4147.in", "r", stdin);
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= m; ++j) {
Read(c[i][j]);
if (c[i][j] == 'R') continue;
U[i][j] = 1;
L[i][j] = R[i][j] = j;
}
for (int i = 1; i <= n; ++i) {
for (int j = 2; j <= m; ++j) {
if (c[i][j] == 'R') continue;
if (c[i][j - 1] == 'F') L[i][j] = L[i][j - 1];
}
for (int j = m - 1; j >= 1; --j) {
if (c[i][j] == 'R') continue;
if (c[i][j + 1] == 'F') R[i][j] = R[i][j + 1];
}
}
int ans = 0;
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= n; ++j) {
if (c[i][j] == 'R') continue;
if (c[i - 1][j] == 'F') {
U[i][j] = U[i - 1][j] + 1;
L[i][j] = max(L[i][j], L[i - 1][j]);
R[i][j] = min(R[i][j], R[i - 1][j]);
}
ans = max(ans, (R[i][j] - L[i][j] + 1) * U[i][j]);
}
ans *= 3;
printf("%d\n", ans);
return 0;
}