牛客網 - 怪盜基德 & 月之瞳寶石
題目連結:https://ac.nowcoder.com/acm/contest/322/J
時間限制:C/C++ 1秒,其他語言2秒
空間限制:C/C++ 32768K,其他語言65536K
64bit IO Format: %lld
題目描述
在這片寂靜的夜色之下,他就這樣靜靜的降臨在我的面前,他的眼神就好像能看透了一切,露出了無所畏懼的笑容。一襲白斗篷和一頂白禮帽,不帶一絲多餘的動作,他的臉在單眼眼睛跟逆光之下。
to 世紀末的魔術師
By the mysterious man
怪盜基德在上次失敗後,對美麗的月之瞳寶石非常覬覦,他想要得到它,以世紀末的魔術師的名義。但是卻遇到了重重機關阻攔,眼看到了月之瞳寶石盒之前,怪盜基德卻停下了腳步。
“世界上有些謎,還是讓它永遠成為謎比較好”
話音剛落,只見一片白霧,待霧散開之時,他已經消失在月色之中。
在怪盜基德走後,你潛入進去,卻發現,上面篆刻著一段奇怪的話:
在縹緲的宇宙中,有一條穿越時空的隧道,在這條隧道中,有著許多星體和能源體,他們都排列在一條直線上,對於每個星體而言,他們都需要能源體的照耀才能夠存活於這條時空隧道當中,當然一個能源體可以同時為多個星體提供能源(對於一個能源體來說,也可能沒有星體需要它提供能源)。但是,有所限制的是每個能源體只能為與自身相距x之內的星體提供能源。現在需要你找到最小的x,使得每個星體都能夠得到能源(即每個星體必須得到至少一個能源體的照耀)。
現在是你作為怪盜基德的徒弟大展身手的時候了。
輸入描述:
輸入共三行,第一行有兩個數n和m(1 <= n, m <= 1e5),分別代表有n個星體,m個能源體。
第二行有n個數a1, a2, ... an,代表n個星體的位置。(-2e9 <= a[i] <= 2e9)
第三行有m個數b1, b2, ... bm,代表m個能源體的位置。(-2e9 <= b[j] <= 2e9)
輸出描述:
輸出最小的x,滿足每個星體都有至少一個能源體為其提供能源。
輸入
3 2
-2 2 4
-3 0
4 3
7 -2 5 6
1 8 -3
輸出
4
3
說明
對於3個位置的星體,與其距離最近的能源體距離分別為1,2,4,所以能源體照耀的範圍只需為4即可
解題思路
暴力找一遍,求出每個星體離能源體最近的距離,並求出它們的最大值。當然,可以用二分查詢。
#include <cmath> #include <iostream> #include <algorithm> using namespace std; int main() { int n, m; long long a[100005], b[100005], maxx = 0, minn; scanf("%d%d", &n, &m); for (int i = 0; i < n; i++) scanf("%lld", &a[i]); for (int i = 0; i < m; i++) scanf("%lld", &b[i]); sort(a, a + n); sort(b, b + m); for (int x = 0, i = 0; i < n; i++) { while (a[i] > b[x] && x < m - 1) x++; minn = min(fabs(b[x] - a[i]), fabs(b[x - 1] - a[i])); maxx = max(minn, maxx); } printf("%lld\n", maxx); return 0; }