题目不难理解,二分答案,然后判断可行就行了。
但要注意两个陷阱:
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.