社区讨论

错误编号215

P1182数列分段 Section II参与者 5已保存回复 11

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
11 条
当前快照
1 份
快照标识符
@mi4g61lk
此快照首次捕获于
2025/11/18 18:45
4 个月前
此快照最后确认于
2025/11/18 18:51
4 个月前
查看原帖
(这题二分。)
题目说了a[i]之后不会爆longint,我不知道哪里还会出现算术上溢错误。
CPP
var
 n,m,i,sum,mid,l,r:longint;
 a:array[0..max_n+1] of longint;
function ok(x:longint):boolean;
var
 i,j,sum:longint;
begin
 j:=1;
 for i:=1 to m do
 if j<=n then
 begin
  sum:=0;
  while (j<=n)and(sum+a[j]<=x) do
  begin
   inc(sum,a[j]); inc(j);
  end;
 end
 else exit(true);
 if j=n+1 then exit(true);
 exit(false);
end;
begin
 readln(n,m);
 for i:=1 to n do
 begin
  read(a[i]);
  inc(r,a[i]);
  if a[i]>l then l:=a[i];
 end;
 dec(r,m-1);
 while l<r do
 begin
  mid:=(l+r) div 2;
  if ok(mid) then r:=mid
  else l:=mid+1;
 end;
 writeln(l);
end.

回复

11 条回复,欢迎继续交流。

正在加载回复...