求hack
查看原帖
求hack
202802
BotDand楼主2020/8/29 21:42
var
  i,t:longint;
 procedure work;
  var
    n,i:longint;
    a:array[0..501] of int64;
    s:array[0..501] of int64;
    max,sum,m,r,l,mid:int64;
   function he(m:int64):longint;
    var
      i,s:longint;
      sum:int64;
    begin
      i:=1;sum:=0;s:=0;
      while i<=n do
        begin
          if sum+a[i]>m then begin inc(s);sum:=a[i];end else sum:=sum+a[i];
          inc(i);
        end;
      exit(s+1);
    end;
  begin
    readln(n,m);
    fillchar(a,sizeof(a),0);
    fillchar(s,sizeof(s),0);
    max:=-maxlongint;
    for i:=1 to n do read(a[i]);
    for i:=1 to n do if a[i]>max then max:=a[i];
    for i:=1 to n do s[i]:=s[i-1]+a[i];
    r:=max;l:=s[n];
    while r<=l do
      begin
        mid:=(r+l) div 2;
        if he(mid)<=m then l:=mid-1 else r:=mid+1;
      end;
    sum:=0;
    for i:=1 to n do
      begin
        if sum+a[i]>=r then write('/ ');
        if sum>r then sum:=0;
        write(a[i],' ');sum:=sum+a[i];
      end;
    writeln;
  end;
begin
  readln(t);
  for i:=1 to t do work;
end.
2020/8/29 21:42
加载中...