UVA - 1330

来源:互联网 发布:bi数据分析是什么 编辑:程序博客网 时间:2024/05/17 22:39
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>//using namespace std;const int maxn = 1005;int max(int a, int b){ return  a>b ? a:b; }int min(int a, int b){ return  a<b ? a:b; }int up[maxn][maxn],left[maxn][maxn],right[maxn][maxn],maze[maxn][maxn],n,m;/*up[i][j] : the distance from (i,j) to  (i-t,j) ,where (i-t,j) is the top free sapce (i,j) can straightly get           there without crossing 'R' space;           Let we call  the line from (i,j) to  (i-t,j) as "hanging line";left[i][j] :  the leftmost column position where the hanging line can splay to;   right[i][j] :  the rightmost column position where the hanging line can splay to;*/int main(){  int T;  scanf("%d",&T);  while(T--){    scanf("%d %d",&n,&m);    for(int i=1;i<=n;i++)       for(int j=1;j<=m;j++){         int ch=getchar();         while(ch!='F'&&ch!='R') ch=getchar();         maze[i][j] = ch=='F' ? 0 : 1;    }    for(int i=1;i<=n;i++){        int lo=0;        for(int j=1;j<=m;j++){            if(maze[i][j]==1){                 left[i][j] = up[i][j]=0; lo=j;            }            else {                left[i][j]= i==1 ? lo+1:max(lo+1,left[i-1][j]);                up[i][j]= i==1 ? 1 : up[i-1][j]+1;             }        }    }    int ans=0;    for(int i=1;i<=n;i++){       int ro=m+1;       for(int j=m;j>=1;j--){           if(maze[i][j]==1){                 right[i][j] = m; ro=j;           }           else {                right[i][j] = i==1 ? ro-1 : min(ro-1 , right[i-1][j]);           }           ans=max(ans,(right[i][j]-left[i][j]+1)*up[i][j]);       }    }    printf("%d\n",ans*3);  }  return 0;}


0 0
原创粉丝点击