时间限制:1秒 内存限制:128M
题目描述
农夫约翰有N头牛,编号1~N,计划表演杂技叠罗汉,表演时奶牛们站在彼此的身上,形成一个高高的垂直堆叠。奶牛们师徒找到自己所处的位置顺序。
每头奶牛都有自己的重量Wi和自己的强壮程度Si。
一头牛支撑不住的可能性取决于它头上所有牛的总重量(不包括自己)减去自己的身体强壮程度,这个值称为风险值,风险值越大,这只牛撑不住的可能性越高。
我们需要确定奶牛的顺序,使得所有奶牛的风险值中的最大值尽可能的小。
输入描述
第一行一个整数 ,表示奶牛的数量。
接下来N行,每行两个整数Wi和Si
输出描述
输出一个整数,表示最大风险值的最小可能值。
输入样例
3
10 3
2 5
3 3
输出描述
2
数据范围
1 <= N <= 50000
1 <= Wi <= 10,000
1 <= Si <= 1,000,000,000
#include<cmath>
#include<cstdio>
#include<string>
#include<cstring>
#include<iomanip>
#include<iostream>
#include<algorithm>
using namespace std;
const int N=1e5+10;
struct node{
int w;
int s;
}a[N];
bool cmp(node x,node y){
return x.w <y.w ;
}
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i].w >>a[i].s ;
a[i].w +=a[i].s ;
}
sort(a+1,a+n+1,cmp);
long long ans=-1e5,sum=0;
for(int i=1;i<=n;i++){
ans=max(ans,sum-a[i].s );
sum+=a[i].w -a[i].s ;
}
cout<<ans;
return 0;
}