Informatika gyűjtemény

Egy szinttel feljebb kb_lapok.pas

2004050607080910

NézetNyomtat

kb_lapok.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: 3 KB
{Written by Messo in Poor Pascal}

uses crt,strings;

const abc='1'; {ide irando a feladat sorszama}

type tomb = array[1..100] of record
     x1, y1, x2, y2 : integer;
     end;
     vtype = record
           val : integer;
           old : integer;
           pos : byte;
           idx : byte;
     end;

var t:tomb;
    n:byte;
    v:array[1..200] of vtype;
    asztal: array[1..200,1..200] of record
            db : byte;
    end;

procedure beolvas;
var f:text;
    i:byte;
begin
     assign(f, StrCat(StrCat('lapok',abc),'.be'));
     reset(f);
     readln(f, N);
     for i:=1 to n do begin
         readln(f, t[i].x1, t[i].y1, t[i].x2, t[i].y2);
     end;
     close(f);
end;

procedure csere(x, y:byte);
var tmp:vtype;
begin
     tmp := v[x];
     v[x] := v[y];
     v[y] := tmp;
end;

procedure tomorit;
var i:byte;
    a,b:byte;
    min : integer;
    idx : byte;
    c:byte;
begin
     {x alapjan rendezunk}

     for i:=1 to N do begin
         v[2*i-1].val :=t[i].x1;
         v[2*i-1].old :=t[i].x1;
         v[2*i-1].pos :=1;
         v[2*i-1].idx :=2*i-1;
         v[2*i].val := t[i].x2;
         v[2*i].old := t[i].x2;
         v[2*i].pos := 2;
         v[2*i].idx := 2*i;
     end;

     c:=1;

     for a:=1 to 2*do begin
         min := v[a].val;
         idx := a;
         for b:=a+1 to 2*do begin
             if( min > v[b].val ) then begin min := v[b].val; idx:=b; end;
         end;
         csere(a, idx);

         if( a>1 ) then begin
             if( v[a].old > v[a-1].old ) then begin
                 v[a].val := c+1;
                 inc(c);
             end else
             if( v[a].old = v[a-1].old ) then v[a].val:=c;
         end else begin
             v[a].val := 1;
         end;
     end;

     {visszair}

     for a:=1 to 2*do begin
         if( v[a].pos = 1 ) then
             t[(v[a].idx+1) div 2].x1 := v[a].val;
         if( v[a].pos = 2 ) then
             t[(v[a].idx+1) div 2].x2 := v[a].val;

     end;

     {y alapjan rendezunk}

     for i:=1 to N do begin
         v[2*i-1].val :=t[i].y1;
         v[2*i-1].old :=t[i].y1;
         v[2*i-1].pos :=1;
         v[2*i-1].idx :=2*i-1;
         v[2*i].val := t[i].y2;
         v[2*i].old := t[i].y2;
         v[2*i].pos := 2;
         v[2*i].idx := 2*i;
     end;

     c:=1;

     for a:=1 to 2*do begin
         min := v[a].val;
         idx := a;
         for b:=a+1 to 2*do begin
             if( min > v[b].val ) then begin min := v[b].val; idx:=b; end;
         end;
         csere(a, idx);

         if( a>1 ) then begin
             if( v[a].old > v[a-1].old ) then begin
                 v[a].val := c+1;
                 inc(c);
             end else
             if( v[a].old = v[a-1].old ) then v[a].val:=c;
         end else begin
             v[a].val := 1;
         end;
     end;

     {visszair}

     for a:=1 to 2*do begin
         if( v[a].pos = 1 ) then
             t[(v[a].idx+1) div 2].y1 := v[a].val;
         if( v[a].pos = 2 ) then
             t[(v[a].idx+1) div 2].y2 := v[a].val;

     end;

end;

procedure megold;
var i,x,y:byte;
    max:byte;
    fout:text;
begin

     max := 0;

     {kitolt}

     for i:=1 to N do begin

         for x:=t[i].x1 to t[i].x2 do begin
             for y:=t[i].y1 to t[i].y2 do begin

                 inc(asztal[x][y].db);
                 if( max < asztal[x][y].db ) then max := asztal[x][y].db;

             end;
         end;


     end;

     assign(fout, StrCat(StrCat('lapok_',abc),'.ki'));
     rewrite(fout);
     writeln(fout, max);
     close(fout);

end;

procedure main;
begin
     beolvas;
     tomorit;
     megold;
end;

begin
     main;
end.
(Vissza)