题意:让你求图中面积第二大的全1矩阵的面积
枚举图中所有点,预处理出每一列的空地的连续长度,然后从右下角枚举是空地的点的最大高度,左右扩展宽度
高度和宽度取一个最小值,然后算出正方形的面积,同时取最大值,并且更新第二大值
#include <bits/stdc++.h>
using namespace std;
const int man=1005;
int a[man][man];
int h[man][man];
int main()
{
int n,m;
scanf("%d%d",&n,&m);
char c;
for(int i=1;i<=n;i++){
getchar();
for(int j=1;j<=m;j++){
scanf("%1d",&a[i][j]);
if(a[i][j]){
h[i][j]=h[i-1][j]+1;
}
}
}
int m1=0,m2=0;
for(int i=n;i>=1;i--){
for(int j=m;j>=1;j--){
if(!h[i][j]) continue;
int mi=h[i][j];
for(int k=j;k&&h[i][k];k--){
if(mi*j<=m2) break;
mi=min(mi,h[i][k]);
int m=mi*(j-k+1);
if(m>=m1){
m2=m1,m1=m;
}
else{
if(m>=m2) m2=m;
}
}
}
}
printf("%d\n",m2);
return 0;
}