最大正方形

#include <cstdio>
#include <algorithm>

using namespace std;

int n, m, ans;
int a[105][105], sum[105][105];

int main()
{
    int size;
    scanf("%d%d", &n, &m);
    size = min(n, m);
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= m; j++)
        {
            scanf("%d", &a[i][j]);
            sum[i][j] = sum[i - 1][j] + sum[i][j - 1] - sum[i - 1][j - 1] + a[i][j];
        }
    }
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= m; j++)
        {
            for (int l = 1; l <= size; l++)
            {
                int rx = i + l - 1;
                int ry = j + l - 1;
                if (rx > n || ry > m || sum[rx][ry] - sum[rx][j - 1] - sum[i - 1][ry] + sum[i - 1][j - 1] != l * l)
                    break;
                if (ans < l)
                    ans = l;
            }
        }
    }
    printf("%d", ans);
}
posted @ 2022-08-01 11:20  亚托莉的亚托莉  阅读(43)  评论(0)    收藏  举报