Cod sursa(job #277812)

Utilizator MBlueGheorghevici Mihai MBlue Data 11 martie 2009 22:10:37
Problema Transport Scor 50
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.3 kb
var i,n,k: integer;
    max,min:longint;
    s : array[1..16000] of integer;
    f : text;

procedure citeste;
begin
     read(f,n,k,s[1]);
     min := s[1];
     max := s[1];
     for i := 2 to n do begin
         read(f,s[i]);
         if s[i] > min then min := s[i];
         max := max + s[i];
     end;
end;

function verificare(m:longint):boolean;
var x,c : integer;
begin
     verificare := true;
     x := 1;
     c := 0;
     for i := 1 to n do begin
         if (c + s[i]) <= m then begin
            c := c + s[i];
         end
         else begin
              c := s[i];
              x := x +1;
              if x > k then begin
                 verificare := false;
                 break;
              end;
         end;
     end;
end;

function cbin(p,q : longint):longint;
var m,cmin : longint;
begin
     cmin := q;
     while p <= q do begin
           m := (p+q) div 2;
           if verificare(m) then begin
              cmin := m;
              q := m -1;
           end
           else p := m +1;
     end;
     cbin := cmin ;
end;
begin
     assign(f,'transport.in');reset(f);
     citeste; close(f);
     assign(f,'transport.out');rewrite(f);
     if verificare(min) then write(f,min)
     else
     write(f,cbin(min,max));
     close(f);
end.