Cod sursa(job #131269)

Utilizator vladianavladiana micu vladiana Data 3 februarie 2008 15:42:11
Problema Transport Scor 40
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.18 kb
var fi,fo:text;
    n,k,i,j,s,max,nrtr:longint;
    v:array[1..16000]of integer;
function verif(k:longint; var trans:longint):boolean;
var i,suma:longint;
begin
  trans:=0; suma:=0;
  for i:=1 to n-1 do
    if v[i]+suma<=k then suma:=suma+v[i]
      else
        begin
          suma:=v[i];
          inc(trans);
        end;
  if suma+v[n]>k then inc(trans,2)
                 else inc(trans);
  if trans=nrtr then verif:=true
                else verif:=false;
end;
function find(st,dr:longint):longint;
var mij,trans:longint;
begin
  while st<dr do
    begin
      mij:=(st+dr) shr 1;
      if verif(mij,trans) then
        begin
          while verif(mij-1,trans) do
            dec(mij);
          find:=mij;
          exit;
        end
     else
      if trans>nrtr then st:=mij+1
                    else dr:=mij-1;
     end;
end;
begin
  assign(fi,'transport.in'); reset(fi);
  assign(fo,'transport.out'); rewrite(fo);
  read(fi,n,nrtr);
  max:=0; s:=0;
  if nrtr>n then nrtr:=n;
  for i:=1 to n do
    begin
      read(fi,v[i]);
      s:=s+v[i];
      if v[i]>max then max:=v[i];
    end;
  writeln(fo,find(max,s));
  close(fi);
  close(fo);
end.