洛谷P1316 丟瓶蓋(二分)

2021-08-27 18:38:59 字數 1133 閱讀 4750

陶陶是個貪玩的孩子,他在地上丟了a個瓶蓋,為了簡化問題,我們可以當作這a個瓶蓋丟在一條直線上,現在他想從這些瓶蓋裡找出b個,使得距離最近的2個距離最大,他想知道,最大可以到多少呢?

輸入格式:

第一行,兩個整數,a,b。(b<=a<=100000)

第二行,a個整數,分別為這a個瓶蓋座標。

輸出格式:

僅乙個整數,為所求答案。

輸入樣例#1:

5 3

1 2 3 4 5

輸出樣例#1:

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個瓶蓋座標。輸出格式 僅乙個整數,...