caozhihan @ 2024-08-18 19:41:49
#include <bits/stdc++.h>
using namespace std;
char s[11][11];
long long n,m;
struct dot
{
long long x;
long long y;
};
bool can (dot,dot,dot,dot);
int main()
{
long long mx=0;
dot a,b,c,d;
cin>>n>>m;
for(long long i=1;i<=n;i++)
{
for(long long j=1;j<=m;j++)
{
cin>>s[i][j];
}
}
for(long long i=1;i<=n;i++)
{
for(long long j=1;j<=n;j++)
{
a.x=i;a.y=j;
for(long long k=a.y;k<=m;k++)
{
b.x=i;b.y=k;
for(long long l=a.x;l<=n;l++)
{
c.x=l;c.y=a.y;
d.x=l;d.y=b.y;
if(can(a,b,c,d)&&(c.x-a.x+1)*(b.y-a.y+1)>mx) mx=(c.x-a.x+1)*(b.y-a.y+1);
}
}
}
}
cout<<mx<<endl;
return 0;
}
bool can (dot a,dot b,dot c,dot d)
{
int num1=0,num0=0;
for(long i=a.x;i<=c.x;i++)
{
for(long j=a.y;j<=b.y;j++)
{
if(s[i][j]=='0') num0++;
else num1++;
}
}
if(num1==num0) return true;
else return false;
};
小杨有一个
第一行包含两个正整数
之后
输出一个整数,代表最大的平衡子矩形包含格子的数量,如果不存在则输出
4 5
00000
01111
00011
00011
16
【样例解释】
对于样例
【数据范围】
对于全部数据,保证有
by caozhihan @ 2024-08-18 19:43:34
AC必关
by User709913 @ 2024-08-18 19:46:43
@caozhihan 你这个估计T了,要用到二维前缀和
by User709913 @ 2024-08-18 19:47:29
@caozhihan 哦,数据范围小,那没事了
by caozhihan @ 2024-08-18 20:59:47
可是显示的是WA
by Roy_2010 @ 2024-08-19 22:44:00
@caozhihan 可以尝试把
for(long long j=1;j<=n;j++)
改成
for(long long j=1;j<=m;j++)
试试
by Roy_2010 @ 2024-08-20 13:00:40
数据
input
2 6
001000
111111
output
6
原代码输出4\ 新代码是6
希望可以帮到你
by Roy_2010 @ 2024-08-20 13:03:09
是第25行的循环语句
by caozhihan @ 2024-08-20 16:46:19
谢谢,已关