Informatika gyűjtemény

Egy szinttel feljebb haromszog.pas

2004050607080910

NézetNyomtat

haromszog.pas (Vissza)
Az alábbi letöltési lehetőségek közül választhatsz: (segítség)
Karakterkódolás:
Sortörés:
Típus: text/plain
Tartalmaz szöveget
Karakterkódolás: us-ascii
Méret: 2 KB
program haromszog;

uses math;

const maxN  = 100;

type  TTomb = array[1..maxN,1..maxN*2-1] of boolean;

var t: TTomb;
    N:byte;
    
procedure loadtri;
var i,j:byte;
    ch:char;
begin
  readln(N);
  for i:=1 to N do
    for j:=1 to 2*N-1 do
      t[i,j]:=false;
       
  for i:=downto 1 do
    begin
      for j:=1 to n+i-1 do
        begin
          read(ch);
          if ch='-' then t[i,j]:=true;
        end;
      readln;
    end;
end;

procedure dump;
var i,j:byte;
begin
  for i:=1 to N do
    begin
      for j:=1 to 2*N-1 do
        if t[i,j] then write('X') else write('.');
      writeln;
    end;
end;

{------------------------------------------------------------------------------}
function test1(a,b:byte;k:byte):boolean;
var r:boolean;
    i,j:byte;
begin
  r:=true;
  for i:=to a+k-1 do
    for j:=a+b-to b-a+do
      if not(t[i,j]) then r:=false;
  test1:=r;
end;

function proba1(k:byte):boolean;
var r:boolean;
    a,b:byte;
begin
  r:=false;
  for a:=1 to N-K+1 do
    for b:=n+1-to n-1+do
      if (a+b) mod 2 = (n+1) mod 2 then
        if test1(a,b,k) then r:=true;
  proba1:=r;
end;

{------------------------------------------------------------------------------}

{------------------------------------------------------------------------------}
function test2(a,b:byte;k:byte):boolean;
var r:boolean;
    i,j:byte;
begin
  r:=true;
  for i:=downto a-k+1 do
    for j:=b-(a-i) to b+a-do
      if not(t[i,j]) then r:=false;
  test2:=r;
end;

function proba2(k:byte):boolean;
var r:boolean;
    a,b:byte;
begin
  r:=false;
  for a:=to N do
    for b:=to (2*n-1)-k+1 do
      if (a+b) mod 2 = (n) mod 2 then
        if test2(a,b,k) then r:=true;
  proba2:=r;
end;

{------------------------------------------------------------------------------}

function max1:integer;
var x:integer;
    k:byte;
begin
  x:=0;
  for k:=downto 1 do
    begin
      if proba1(k) then
        begin
          x:=k;
          break;
        end;
    end;
  max1:=x*x;
end;

function max2:integer;
var x:integer;
    k:byte;
begin
  x:=0;
  for k:=downto 1 do
    begin
      if proba2(k) then
        begin
          x:=k;
          break;
        end;
    end;
  max2:=x*x;
end;

begin
  repeat
    loadtri;
    if n<>0 then
      begin
///        dump;
        writeln(max(max1,max2));
      end;
  until n=0;
end.
(Vissza)