洛谷 P1316 丟瓶蓋

2021-07-26 07:54:44 字數 1564 閱讀 9000

題目描述

陶陶是個貪玩的孩子,他在地上丟了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個瓶蓋座標。輸出格式 僅乙個整數,...