Cod sursa(job #249057)

Utilizator belgun_adrianBelgun Dimitri Adrian belgun_adrian Data 27 ianuarie 2009 14:05:25
Problema Transport Scor 80
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.27 kb
// Arhiva de probleme - transport


var
        n,k,i,x,max,s,stg,drp,mid : longint;
        st              : array [1..16000] of longint;
        f               : text;


function  trans         (vol:longint):boolean;
var
        vf, nr, s, x    : longint;
begin
vf      := 1;
nr      := 1;
s       := 0;
trans   := false;
while (vf <= n) do
      begin
      x := st[vf];
      if (s + x <= vol) then
         s  := s + x
      else
         begin
         s  := x;
         inc(nr);
         if (nr > k) then exit;
         end;
      inc   (vf);
      end;
trans:= true;
end;


begin
assign  (f, 'transport.in');
reset   (f);
readln  (f, n, k);
max     := 0;
s       := 0;
for i := 1 to n do
    begin
    readln (f, x);
    if (max < x) then max := x;
    s   := s + x;
    st[i]  := x;
    end;
close   (f);

// pt 40
// for x := max to s do
//     if (trans(x) = true) then
//         break;


// pt 100 (teoretic, ca imi da 80..)

stg      := max;
drp      := s;

while (stg<=drp) do
      begin
      mid := stg + (drp-stg) shr 1;
      if (trans(mid) = true) then
          drp := mid-1
      else
          stg := mid+1;
      end;

assign  (f, 'transport.out');
rewrite (f);
writeln (f, mid);
close   (f);
end.