傳送門
題意:農民約翰的n頭奶牛(編號為1…n)計畫逃跑並加入馬戲團,為此它們決定練習表演雜技。
奶牛們不是非常有創意,只提出了乙個雜技表演:
疊羅漢,表演時,奶牛們站在彼此的身上,形成乙個高高的垂直堆疊。
奶牛們正在試圖找到自己在這個堆疊中應該所處的位置順序。
這n頭奶牛中的每一頭都有著自己的重量wi以及自己的強壯程度si。
一頭牛支撐不住的可能性取決於它頭上所有牛的總重量(不包括它自己)減去它的身體強壯程度的值,現在稱該數值為風險值,風險值越大,這只牛撐不住的可能性越高。
您的任務是確定奶牛的排序,使得所有奶牛的風險值中的最大值盡可能的小。
輸入格式
第一行輸入整數n,表示奶牛數量。
接下來n行,每行輸入兩個整數,表示牛的重量和強壯程度,第i行表示第i頭牛的重量wi以及它的強壯程度si。
輸出格式
輸出乙個整數,表示最大風險值的最小可能值。
資料範圍
1≤n≤50000,
1≤wi≤10,000,
1≤si≤1,000,000,000
輸入樣例:
310 3
2 53 3
輸出樣例:
2思路:將wi + si按照從小到大排序,最大危險係數就是最小的。
**實現:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define int long long
#define lowbit(x) (x &(-x))
#define me(ar) memset(ar, 0, sizeof ar)
#define mem(ar,num) memset(ar, num, sizeof ar)
#define rp(i, n) for(int i = 0, i < n; i ++)
#define rep(i, a, n) for(int i = a; i <= n; i ++)
#define pre(i, n, a) for(int i = n; i >= a; i --)
#define ios ios::sync_with_stdio(0); cin.tie(0);cout.tie(0);
const
int way[4]
[2]=
,,,}
;using
namespace std;
typedef
long
long ll;
typedef pair pll;
const
int inf =
0x3f3f3f3f3f3f3f3f
;const
double pi =
acos(-
1.0)
;const
double exp =
1e-8
;const ll mod =
1e9+7;
const
int n =
2e5+5;
int n;
struct node
}a[n]
;signed
main()
;}sort
(a, a + n)
;int sum =
0, ans =
-2e9
;for
(int i =
0; i < n; i ++
) cout << ans << endl;
return0;
}
耍雜技的牛
農民約翰的n nn頭奶牛 編號為1.n1.n 1.n 計畫逃跑並加入馬戲團,為此它們決定練習表演雜技。奶牛們不是非常有創意,只提出了乙個雜技表演 疊羅漢,表演時,奶牛們站在彼此的身上,形成乙個高高的垂直堆疊。奶牛們正在試圖找到自己在這個堆疊中應該所處的位置順序。這n nn頭奶牛中的每一頭都有著自己的...
耍雜技的牛
農民約翰的 n 頭奶牛 編號為 1.n 計畫逃跑並加入馬戲團,為此它們決定練習表演雜技。奶牛們不是非常有創意,只提出了乙個雜技表演 疊羅漢,表演時,奶牛們站在彼此的身上,形成乙個高高的垂直堆疊。奶牛們正在試圖找到自己在這個堆疊中應該所處的位置順序。這n頭奶牛中的每一頭都有著自己的重量wi以及自己的強...
125 耍雜技的牛
結論 證明 第乙個不用證明,很明顯 第二個 假設wi si w i 1 s i 1 由於wi si w i 1 s i 1 wi si si 所以交換後 兩頭牛的風險的最大值一定是小於交換前兩頭牛的風險的最大值的!那麼總體的風險的最大值就不可能增加,只可能不變或減小。所以得證。所以我們就按wi si...