Informatika gyűjtemény

Egy szinttel feljebb pr_median.pas

2004050607080910

NézetNyomtat

pr_median.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: 899 byte
program median;

var a,b:array[0..3001,0..3001] of longint;
r,c,w,h:longint;
al,fe,vi:longint;
i,j,k,lo:longint;
t,t2:text;

begin
assign(t,'median.in'); reset(t);
readln(t,r,c,h,w);
for i:=1 to r do for j:=1 to c do read(t,a[i,j]);
close(t);
al:=1;
fe:=r*c;
vi:=(fe+al) div 2;


while al<fe do begin



lo:=1;
for i:=1 to r+1 do for j:=1 to c+1 do b[i,j]:=0;

for i:=downto 1 do for j:=downto 1 do begin
b[i,j]:=b[i+1,j];
if a[i,j]>vi then inc(b[i,j]);
if a[i,j]<vi then dec(b[i,j]);
end;

for i:=downto 1 do for j:=downto 1 do b[i,j]:=b[i,j]+b[i,j+1];

for i:=1 to r-h+1 do for j:=1 to c-w+1 do begin
k:=(b[i,j]-b[i+h,j]-b[i,j+w]+b[i+h,j+w]);
if (k=0) and (lo>0) then lo:=0;
if (k<0) then lo:=-1;
end;

if lo=0 then begin al:=vi; fe:=vi; end;
if lo=1 then al:=vi+1;
if lo=-1 then fe:=vi-1;

vi:=(fe+al) div 2;


end;


assign(t2,'median.out'); rewrite(t2); writeln(t2,vi); close(t2);
end.
(Vissza)