Cod sursa(job #7138)

Utilizator maria_pparcalabescu maria daniela maria_p Data 21 ianuarie 2007 12:49:16
Problema Elimin Scor 10
Compilator fpc Status done
Runda preONI 2007, Runda 1, Clasa a 10-a Marime 1.99 kb
type vector=array[1..1000]of longint;
var f,g:text;
    a:array[1..1000,1..1000]of longint;
    sl,sc,pl,pc:array[1..1000]of longint;
    m,n,r,c,i,j,aux,st:longint;

procedure interclasare(var x,y:vector;st,mij,dr:longint);
var i,j,k,q:longint;
    b,c:vector;
begin
for i:=st to dr do
    begin
    b[i]:=x[i];
    c[i]:=y[i];
    end;
i:=st;
k:=st-1;
j:=mij+1;
while (i<=mij)and(j<=dr) do
      if b[i]<b[j] then begin
                        inc(k);
                        x[k]:=b[i];
                        y[k]:=c[i];
                        inc(i);
                        end
                   else begin
                        inc(k);
                        x[k]:=b[j];
                        y[k]:=c[j];
                        inc(j);
                        end;
for q:=i to mij do
    begin
    inc(k);
    x[k]:=b[q];
    y[k]:=c[q];
    end;
for q:=j to dr do
    begin
    inc(k);
    x[k]:=b[q];
    y[k]:=c[q];
    end;
end;

procedure sort(var x,y:vector;st,dr:longint);
var mij:longint;
begin
if st<>dr then begin
               mij:=(st+dr)div 2;
               sort(x,y,st,mij);
               sort(x,y,mij+1,dr);
               interclasare(x,y,st,mij,dr);
               end;
end;

begin
assign(f,'elimin.in');reset(f);
assign(g,'elimin.out');rewrite(g);
readln(f,m,n,r,c);
for i:=1 to m do
    for j:=1 to n do
        read(f,a[i,j]);
st:=0;
for i:=1 to m do
    for j:=1 to n do
        st:=st+a[i,j];
for i:=1 to m do
    begin
    sl[i]:=0;
    for j:=1 to n do
        sl[i]:=sl[i]+a[i,j];
    end;
for j:=1 to n do
    begin
    sc[j]:=0;
    for i:=1 to m do
        sc[j]:=sc[j]+a[i,j];
    end;
for i:=1 to m do
    pl[i]:=i;
for i:=1 to n do
    pc[i]:=i;
sort(sl,pl,1,m);
sort(sc,pc,1,n);
for i:=1 to r do
    begin
    st:=st-sl[i];
    for j:=1 to n do
        sc[pc[j]]:=sc[pc[j]]-a[pl[i],j];
    end;
sort(sc,pc,1,n);
for i:=1 to c do
    st:=st-sc[i];
writeln(g,st);
close(f);
close(g);
end.