Thứ Hai, 9 tháng 5, 2022

XEPTRUNG PASCAL

const fi='xeptrung.inp';fo='xeptrung.out';
var n,m:longint;
    a:array[1..100000] of longint;
    dmin:longint;sum:int64;

procedure enter;
var i:longint;
begin
       readln(n,m); dmin:=maxlongint;
       for i:=1 to n do
    begin
          readln(a[i]);
          sum:=sum+a[i];
          if a[i]<dmin then dmin:=a[i];
    end;
end;

Function Check(val:int64):Boolean;
Var dem,i:longint;  
        s:int64;
Begin
      dem:=1; s:=0;
      for i:=1 to n do
       if s+a[i]<=val then s:=s+a[i]
       else
    begin
        if a[i]>val then exit(false);
          inc(dem);
          if dem>M then exit(false);
          s:=a[i];
    end;
        exit(true);
End;

Procedure solve;
Var Dau,Cuoi,Giua,res,dmax:int64;
Begin
    //Res:=dmax+1;
    {Chat nhi phan ket qua}
    Dau:=dmin-1; Cuoi:=sum+1;
    while (dau<cuoi) do
    begin 
        Giua:=(Dau+Cuoi)div 2;
        if Check(Giua) then
        begin
            Res:=Giua;
            Cuoi:=Giua-1;
        end  
    else Dau:=Giua+1;
    end;
    writeln(res);
End;

begin
    assign(input,fi);reset(input);
    assign(output,fo);rewrite(output);
    enter;
    solve;
end.

Không có nhận xét nào:

Đăng nhận xét

Lưu ý: Chỉ thành viên của blog này mới được đăng nhận xét.