題目描述
陶陶是個貪玩的孩子,他在地上丟了a個瓶蓋,為了簡化問題,我們可以當作這a個瓶蓋丟在一條直線上,現在他想從這些瓶蓋裡找出b個,使得距離最近的2個距離最大,他想知道,最大可以到多少呢?
輸入輸出格式
輸入格式:
第一行,兩個整數,a,b。(b<=a<=100000)
第二行,a個整數,分別為這a個瓶蓋座標。
輸出格式:
僅乙個整數,為所求答案。
輸入輸出樣例
輸入樣例#1:
5 3
1 2 3 4 5
輸出樣例#1:
2 說明
限時3秒
分析:
二分答案,然後看能否找到b個瓶蓋即可。
**:
var a:array [1..100000] of longint;
n,b,i,l,r,m,ans:longint;
procedure
qsort
(l,r:longint);
var i,j,y,z:longint;
begin
i:=l;
j:=r;
z:=a[(l+r) div
2]; repeat
while a[i]do inc(i);
while zdo dec(j);
ifnot(i>j) then
begin
y:=a[i];
a[i]:=a[j];
a[j]:=y;
inc(i);
dec(j);
end;
until i>j;
if lthen qsort(l,j);
if ithen qsort(i,r);
end;
function
judge
(x:longint):boolean;
var i,j,ans,sum:longint;
begin
j:=1;ans:=1;
for i:=1
to n do
begin
if a[i]-a[j]>=x then
begin
j:=i;
inc(ans);
end;
end;
if ans>=b then
exit(true);
exit(false);
end;
begin
read(n,b);
for i:=1
to n do
read(a[i]);
qsort(1,n);
l:=1;
r:=a[n]-a[1];
while l<=r do
begin
m:=(l+r) div
2; if judge(m) then
begin
ans:=m;
l:=m+1;
endelse r:=m-1;
end;
write(ans);
end.
洛谷 P1316 丟瓶蓋
陶陶是個貪玩的孩子,他在地上丟了a個瓶蓋,為了簡化問題,我們可以當作這a個瓶蓋丟在一條直線上,現在他想從這些瓶蓋裡找出b個,使得距離最近的2個距離最大,他想知道,最大可以到多少呢?輸入格式 第一行,兩個整數,a,b。b a 100000 第二行,a個整數,分別為這a個瓶蓋座標。輸出格式 僅乙個整數,...
洛谷P1316 丟瓶蓋
陶陶是個貪玩的孩子,他在地上丟了a個瓶蓋,為了簡化問題,我們可以當作這a個瓶蓋丟在一條直線上,現在他想從這些瓶蓋裡找出b個,使得距離最近的2個距離最大,他想知道,最大可以到多少呢?輸入格式 第一行,兩個整數,a,b。b a 100000 第二行,a個整數,分別為這a個瓶蓋座標。輸出格式 僅乙個整數,...
洛谷 P1316 丟瓶蓋
陶陶是個貪玩的孩子,他在地上丟了a個瓶蓋,為了簡化問題,我們可以當作這a個瓶蓋丟在一條直線上,現在他想從這些瓶蓋裡找出b個,使得距離最近的2個距離最大,他想知道,最大可以到多少呢?輸入格式 第一行,兩個整數,a,b。b a 100000 第二行,a個整數,分別為這a個瓶蓋座標。輸出格式 僅乙個整數,...