problem description
公元2023年,l國發生了一場戰爭。
小y負責領導工人運輸物資。
其中有 m
種物資的運輸方案,每種運輸方案形如 l
i,ri
。表示存在一種貨物從 l
i 運到 r
i 。
這裡有 n
個城市,第 i
個城市與第 i
+1個城市相連(這裡 1
號城市和 n
號城市並不相連),並且從 i
號城市走到 i
+1號或者從 i
+1號走到 i
號需要耗費1點時間。
由於高科技的存在,小y想到了一種節省時間的好方案。在x號城市與y號城市之間設立傳送站,只要這麼做,在x號城市走到y號城市不需要耗費時間,同樣的,從y號城市走到x號城市也不需要耗費時間。
但是為了防止混亂,只能設立這麼一條傳送站。
現在這些運輸方案同時進行,小y想讓最後到達目的地的運輸方案時間最短。
在樣例中,存在兩條運輸方案,分別是1號城市到3號與2號到4號,那麼我們在2號城市與3號城市建立傳送站,這樣運輸方案時間最長的只需要1點時間就可以了。
input
多組測試資料
第一行兩個整數 n
,m(1
≤n,m
≤1000000
) 。
接下來 m
行,每行兩個整數 l
i,ri
(1≤l
i,ri
≤n) 。(若 l
i=ri
,則不需要耗費任何時間)
output
乙個數表示答案。
sample input
5 21 32 4
sample output
1二分答案加驗證,驗證的方法比較巧妙,想了挺久才搞懂。
二分答案為最遠的距離d,用這個d來驗證,對於原本距離小於d的可以不用考慮了,只考慮原來大於d的
假設大於d的距離的兩端是l和r,那麼我們選擇建的區間是l,r那麼一定要滿足
abs(l-l)+abs(r-r)<=d
把這個式子的絕對值去掉,我們可以得到四條式子。
l-l+r-r<=d;
l-l-r+r<=d;
l-l+r-r<=d;
l-l+r-r<=d;
整理一下可得 l+r-d<=l+r<=l+r+d,l-r-d<=l-r<=l-r+d;
那麼我們就可以知道l+r和l-r的範圍了,然後只要做區間的合併,
看最後是否有合法的l+r和l-r即可。
這裡需要注意乙個問題,當l+r和l-r是唯一的且相加為奇數,那麼這樣的情況下,l和r是不存在的。
#pragma comment(linker, "/stack:1024000000,1024000000")
#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;
typedef __int64 ll;
const int low(int x)
const int inf = 0x7fffffff;
const int mod = 1e9 + 7;
const int maxn = 1e6 + 10;
int n, l[maxn], r[maxn], m;
bool check(int d)
return l == r&&ll == rr ? !(l + ll & 1) : l <= r&&ll <= rr;
}int main()
int q = 0, h = n;
while (q <= h)
printf("%d\n", q);
} return 0;
}
HDU 5699 貨物運輸 二分
公元2222年,l國發生了一場戰爭。小y負責領導工人運輸物資。其中有m種物資的運輸方案,每種運輸方案形如li,ri。表示存在一種貨物從li運到ri。這裡有n個城市,第i個城市與第i 1個城市相連 這裡1號城市和n號城市並不相連 並且從i號城市走到i 1號或者從i 1號走到i號需要耗費1點時間。由於高...
51Nod 1671 貨物運輸
acm模版 官方題解 首先我們需要注意到最重要的一點,所有運輸方案同時進行,我們只需要計算最後到達的方案的花費時間的最小值。所以我們需要考慮的是乙個極限情況,在這個極限情況下,其他運輸方案全部是在允許範圍內的。所以我們可以二分列舉這個極限情況,判斷所有方案是否都在這個極限內,在的話就繼續縮小極限,不...
51nod 1671 貨物運輸
公元2222年,l國發生了一場戰爭。小y負責領導工人運輸物資。其中有m種物資的運輸方案,每種運輸方案形如li,ri。表示存在一種貨物從li運到ri。這裡有n個城市,第i個城市與第i 1個城市相連 這裡1號城市和n號城市並不相連 並且從i號城市走到i 1號或者從i 1號走到i號需要耗費1點時間。由於高...