AcWing 152. 城市游戏
原题链接
简单
作者:
llll
,
2019-04-24 22:56:34
,
所有人可见
,
阅读 931
#include<bits/stdc++.h>
using namespace std;
#define N 1010
char mp[N][N];
int a[N][N];
int main()
{
int n,m;
long long ans=0;
cin>>n>>m;
char c;
memset(a,0,sizeof a);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
cin>>mp[i][j];
if(mp[i][j]=='F') a[i][j]=a[i-1][j]+1;
}
for(int i=1;i<=n;i++)
{
stack<int>s;
while(s.size())s.pop();
s.push(0);
a[i][0]=-1;//解决边界问题
a[i][m+1]=-1;// 同上
for(int j=1;j<=m+1;j++)
{
while(a[i][j]<a[i][s.top()])//单调栈
{
int h=a[i][s.top()];
s.pop();
int l=j-s.top()-1;
ans=max(ans,(long long)l*h);
}
s.push(j);
}
}
cout<<ans*3<<endl;
return 0;
}