按结束时间小到大排序,不是也可以做码,最后判断下输出,但是只拿了50,有什么数据是错的吗
#include<bits/stdc++.h>
using namespace std;
/*panda*/
#define pb push_back
#define bug printf("*********\n");
#define INF 0x3f3f3f3f
#define fs first
#define sc second
#define mem0(a) memset(a, 0, sizeof(a));
#define memf(a) memset(a, 0x3f, sizeof(a));
#define f(i,a,b) for(int i = a;i<=b;++i)
#define f_(i,a,b) for(int i = a;i>=b;--i)
typedef long long ll;
typedef unsigned long long ull;
void read(int &x){
int f=1;x=0;char s=getchar();
while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();}
while(s>='0'&&s<='9'){x=x*10+s-'0';s=getchar();}
x*=f;
}
const int N =1e3+10;
int n;
struct node{
int t,s;
}ar[N];
bool cmp(node x,node y){
return x.s<y.s;
}
void slove(){
cin>>n;
f(i,1,n){
scanf("%d%d",&ar[i].t,&ar[i].s);
}
sort(ar+1,ar+1+n,cmp);
int t = 0,fg = 0;
f(i,1,n){
if(ar[i].t+t <= ar[i].s){
t+=ar[i].t;
}else{
fg = 1;
break;
}
}
if(fg == 1)cout<<-1;
else cout<<min(ar[n].s-t,ar[1].s-ar[1].t);
}
int main(){
int _ = 1;
// cin>>_;
while(_--)slove();
return 0;
}