悬线法 55分求调
查看原帖
悬线法 55分求调
1265486
ShiqingHuang1117楼主2024/3/15 19:23
#include<iostream>
using namespace std;
const int maxn = 10100;
char a[maxn][maxn];
int l[maxn][maxn],r[maxn][maxn],h[maxn][maxn];
int n,m,ans = 0;
int main()
{
    cin>>n>>m;
    for(int i = 1;i <= n;i++){
        for(int j = 1;j <= m;j++){
            cin>>a[i][j];
            h[i][j] = 1;
            l[i][j] = r[i][j] = j;
        }
        for(int j = 2;j <= m;j++){
            if(a[i][j] == 'F' && a[i][j - 1] == 'F')
                l[i][j] = l[i][j - 1];
        }
        for(int j = m - 1;j >= 1;j--){
            if(a[i][j] == 'F' && a[i][j + 1] == 'F')
                a[i][j] = a[i][j + 1];
        }
    }
    for(int i = 1;i <= n;i++){
        for(int j = 1;j <= m;j++){
            if(i > 1 && a[i][j] == 'F'){
                if(a[i - 1][j] == 'F'){
                    h[i][j] = h[i - 1][j] + 1;
                    l[i][j] = max(l[i - 1][j],l[i][j]);
                    r[i][j] = min(r[i - 1][j],r[i][j]);
                }
                ans = max((r[i][j] - l[i][j] + 1) * h[i][j] , ans);
            }
        }
    } 
    cout<<ans * 3<<'\n';
    return 0;
}
2024/3/15 19:23
加载中...