最大正方形 (Standard IO)

    xiaoxiao2024-12-20  4

    Description

      给一个N*N的01矩阵, 求一个面积最大的全为1的正方形子矩阵. 输出它的面积.

    Input

      输入文件square.in的第一行包含一个正整数N.   接下来N行, 每行N个数, 保证不是0就是1. 每行相邻两个数之间没有空格.

    Output

      输出文件为square.out,仅包含一个整数表示最大的全1子正方形矩阵的面积。

    题解

    五个字,优美的暴力。

    代码

    var n,ans:longint; f:array [0..1001,0..1001] of integer; a:array [0..1001,0..1001] of char; procedure init; var i,j:longint; begin readln(n); for i:=1 to n do begin for j:=1 to n do read(a[i,j]); readln; end; for i:=0 to n+1 do begin a[0,i]:='0'; a[n+1,i]:='0'; end; for i:=0 to n+1 do begin a[i,0]:='0'; a[i,n+1]:='0'; end; ans:=0; end; procedure main; var i,j,x,min:longint; begin fillchar(f,sizeof(f),0); for i:=1 to n do for j:=1 to n do if (a[i,j]='1') then if (a[i-1,j]='0') then f[i,j]:=1 else f[i,j]:=f[i-1,j]+1; for i:=1 to n do for j:=1 to n do if a[i,j]='1' then begin x:=j; min:=maxlongint; while a[i,x]='1' do begin if f[i,x]<min then min:=f[i,x]; if ((x-j+1)*min>ans) and ((x-j+1)=min) then ans:=(x-j+1)*min; inc(x); end; end; write(ans); end; begin init; main; end.
    转载请注明原文地址: https://ju.6miu.com/read-1294785.html
    最新回复(0)