poj之旅——3104

题目不难理解,二分答案,然后判断可行就行了。

但要注意两个陷阱:

1.加了散热器,一分钟一共只散k点水(包括自然蒸发)

2.小心k=1

程序:

var
  k,mid,l,r,n,i:longint;
  w:array[0..110000]of longint;
function check(mid:longint):boolean;
var
  i,more,min:longint;
begin
  min:=0;
  for i:=1 to n do
   begin
     more:=w[i]-mid;
     if more>0 then
      begin
        min:=min+(more+k-1) div k;
        if min>mid then exit(false);
      end;
   end;
  exit(true);
end;
begin
  readln(n);
  l:=maxlongint;
  for i:=1 to n do
   begin
     read(w[i]);
     if w[i]<l then l:=w[i];
     if w[i]>r then r:=w[i];
   end;
  readln(k);
  k:=k-1;
  if k>0 then
   begin
     l:=l div k;
     while l+1<r do
      begin
        mid:=(l+r)shr 1;
        if check(mid) then r:=mid
         else l:=mid;
      end;
   end;
  write(r);
end.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值