陶陶是個貪玩的孩子,他在地上丟了a個瓶蓋,為了簡化問題,我們可以當作這a個瓶蓋丟在一條直線上,現在他想從這些瓶蓋裡找出b個,使得距離最近的2個距離最大,他想知道,最大可以到多少呢?
輸入格式:
第一行,兩個整數,a,b。(b<=a<=100000)
第二行,a個整數,分別為這a個瓶蓋座標。
輸出格式:
僅乙個整數,為所求答案。
輸入樣例#1:
5 3輸出樣例#1:1 2 3 4 5
2限時3秒
解法:二分答案
本題與《挑戰》一書p142的奶牛問題一樣。
我們考慮二分答案,要使最近的兩頭奶牛的距離最遠。
首先對所有奶牛的位置進行排序
定義c(d):可以安排牛的位置使得最近的兩頭奶牛的間距都不小於d
等價於=>任意兩頭奶牛的間距都大於等於d
所以我們貪心來放奶牛即可,從第乙個位置開始放。
如果可以放下b頭奶牛,則return true
這裡二分的時候要注意一件事:
我們假設二分的三個為l,mid, r;
如果mid滿足條件,則最優解在[mid, r]中,否則最優解在[l, mid - 1]中
所以當滿足條件時這裡不能讓l = mid + 1
因為mid有可能使最優解。
這點注意完這道題就做完了。
#include #define pii pair#define ll long long
#define eps 1e-5
using namespace std;
const int maxn = 1e2 + 10;
int loc[maxn];
int a, b;
bool c(int mid)
if(temp == a) return false;
res = temp;
}return true;
}int main()
cout << l << endl;
return 0;
}
洛谷 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個瓶蓋座標。輸出格式 僅乙個整數,...