1 条题解
-
0Guest LV 0 MOD
-
1
#include<bits/stdc++.h> using namespace std; int n,m,ans=1;//ans 用于求边长 int a[305][305]; bool b; bool check(int px,int py,int of) { int cl=a[px][py]; px++; py++; if(a[px][py]!=cl)//当前的颜色和之前的不同,无法构成矩形 return 0; for(int i=1; i<=of; i++)//两边枚举 if(a[px-i][py]!=cl||a[px][py-i]!=cl)//只要不对就返回 0 return 0; return 1;//否则返回 1 } int main() { scanf("%d%d",&n,&m); for(int i=1; i<=n; i++) for(int j=1; j<=m; j++) scanf("%d",&a[i][j]); for(int i=1; i<=n&&!b; i++)//枚举 for(int j=1; j<=m; j++) { if(n-i<ans||m-j<ans)//剩余的比现在的 ans 小,没必要做 { if(n-i<ans) b=1;//标识打上 break; } else { int os=1,tx=i,ty=j; while(tx<n&&ty<m)//在范围内,继续搜索 { if(check(tx,ty,os))//满足条件 { tx++; ty++; os++;//目前搜索的最大边长 ans=max(ans,os);//替换掉 } else tx=n; } } } printf("%d",ans*ans);//边长×边长是最终面积 return 0; }
- 1