题意是和POJ 1964 是一样的
看下我的这篇博客就可以知道做法了
这题的转换再看下输入是如何转换的
#include <cstdio>
#include <cstring>
#include <iostream>
#include <queue>
#include <cmath>
#include <map>
#include <stack>
#include <set>
#include <sstream>
#include <vector>
#include <stdlib.h>
#include <algorithm>
using namespace std;
#define dbg(x) cout<<#x<<" = "<< (x)<< endl
#define dbg2(x1,x2) cout<<#x1<<" = "<<x1<<" "<<#x2<<" = "<<x2<<endl
#define dbg3(x1,x2,x3) cout<<#x1<<" = "<<x1<<" "<<#x2<<" = "<<x2<<" "<<#x3<<" = "<<x3<<endl
const int MAX_N = 1025;
char mp[MAX_N][MAX_N];
int a[MAX_N][MAX_N],b[MAX_N][MAX_N],c[MAX_N][MAX_N],st_p[MAX_N],st_h[MAX_N];
int main()
{
int n,m;
while(scanf("%d%d",&n,&m)==2)
{
getchar();
for(int i = 1;i<=n;++i)
{
for(int j = 1;j<=m;++j)
{
scanf("%c",&mp[i][j]);
if(mp[i][j]=='a')
{
a[i][j] = a[i-1][j] + 1;
b[i][j] = 0;
c[i][j] = 0;
}
else if(mp[i][j]=='b')
{
a[i][j] = 0;
b[i][j] = b[i-1][j] + 1;
c[i][j] = 0;
}
else if(mp[i][j]=='c')
{
a[i][j] = 0;
b[i][j] = 0;
c[i][j] = c[i-1][j] + 1;
}
else if(mp[i][j]=='w')
{
a[i][j] = a[i-1][j] + 1;
b[i][j] = b[i-1][j] + 1;
c[i][j] = 0;
}
else if(mp[i][j]=='x')
{
a[i][j] = 0;
b[i][j] = b[i-1][j] + 1;
c[i][j] = c[i-1][j] + 1;
}
else if(mp[i][j]=='y')
{
a[i][j] = a[i-1][j] + 1;
b[i][j] = 0;
c[i][j] = c[i-1][j] + 1;
}
else if(mp[i][j]=='z')
{
a[i][j] = a[i-1][j] + 1;
b[i][j] = b[i-1][j] + 1;
c[i][j] = c[i-1][j] + 1;
}
else
{
a[i][j] = 0;
b[i][j] = 0;
c[i][j] = 0;
}
}
getchar();
a[i][m+1] = 0;
b[i][m+1] = 0;
c[i][m+1] = 0;
}
int p;
int ans = 0;
for(int i = 1;i<=n;++i)
{
p = 0;
int mx = 0;
for(int j = 1;j<=m+1;j++)
{
int mnp = j;
while(p&&st_h[p]>=a[i][j])
{
mx = max(mx,(j-st_p[p])*st_h[p]);
mnp = min(mnp,st_p[p]);
p--;
}
p++;st_h[p] = a[i][j];st_p[p] = mnp;
}
ans = max(ans,mx);
}
for(int i = 1;i<=n;++i)
{
p = 0;
int mx = 0;
for(int j = 1;j<=m+1;j++)
{
int mnp = j;
while(p&&st_h[p]>=b[i][j])
{
mx = max(mx,(j-st_p[p])*st_h[p]);
mnp = min(mnp,st_p[p]);
p--;
}
p++;st_h[p] = b[i][j];st_p[p] = mnp;
}
ans = max(ans,mx);
}
for(int i = 1;i<=n;++i)
{
p = 0;
int mx = 0;
for(int j = 1;j<=m+1;j++)
{
int mnp = j;
while(p&&st_h[p]>=c[i][j])
{
mx = max(mx,(j-st_p[p])*st_h[p]);
mnp = min(mnp,st_p[p]);
p--;
}
p++;st_h[p] = c[i][j];st_p[p] = mnp;
}
ans = max(ans,mx);
}
printf("%d\n",ans);
}
return 0;
}