Cod sursa(job #1586179)

Utilizator TirauStelianTirau Ioan Stelian TirauStelian Data 31 ianuarie 2016 20:44:49
Problema Elimin Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.78 kb
program elimin;
type element=record
               suma:int64;
               tip:byte;
             end;
var f,g:text;
    aux:element;
    v:array of element;
    ok:boolean;
    m,n,r,c,i,nr,j,st,dr,limita,p,co:longint;
    stotal:qword;
begin
  assign(f,'elimin.in');reset(f);
  assign(g,'elimin.out');rewrite(g);
  readln(f,n,m,r,c);
  limita:=n+m;
  setlength(v,limita+1);
  stotal:=0;
  for i:=1 to n-1 do
    begin
      v[i].tip:=1;
      for j:=1 to m do
        begin
          read(f,nr);
          v[i].suma:=v[i].suma+nr;
          v[n+j].suma:=v[n+j].suma+nr;
          stotal:=stotal+nr;
        end;
      readln(f);
    end;
  v[n].tip:=1;
  for j:=1 to m do
    begin
      read(f,nr);
      v[n+j].tip:=2;
      v[n+j].suma:=v[n+j].suma+nr;
      v[n].suma:=v[n].suma+nr;
      stotal:=stotal+nr;
    end;
  co:=1;
  repeat
    ok:=true;
    limita:=limita-co;
    for i:=1 to limita do
      if v[i].suma<v[i+1].suma then
        begin
          aux:=v[i];
          v[i]:=v[i+1];
          v[i+1]:=aux;
        end;
    if (v[co+1].tip=1)and(r>0) then
      begin
        stotal:=stotal-v[co+1].suma;
        dec(r);
        p:=co+1;
      end
    else
      if (v[co+1].tip=2)and(c>0) then
        begin
          stotal:=stotal-v[co+1].suma;
          dec(c);
          p:=co+1;
        end;
    dec(co);
  until (ok=true)or(r+c=0);
  for i:=p-1 downto 1 do
    begin
      if (v[i].tip=1)and(r>0) then
        begin
          stotal:=stotal-v[i].suma;
          dec(r);
        end
      else
        if (v[i].tip=2)and(c>0) then
          begin
            stotal:=stotal-v[i].suma;
            dec(c);
          end;
      if r+c=0 then
        break;
    end;
  writeln(g,stotal);
  close(f);
  close(g);
end.