NOIP模拟 分糖果(贪心)
就是这道题
【题目分析】
竟然又是一道氵谷原题。。。。。。。
关于排序的正确性以及正确的排序见这篇博客
【代码~】
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int MAXN=5e4+10;
int T,n;
struct student{
LL a,b,c,x;
friend inline bool operator<(const student &a,const student &b){
if(a.x!=b.x)
return a.x<b.x;
if(a.x<=0)
return a.a<b.a;
return a.b>b.b;
}
}stu[MAXN];
LL ans;
int Read(){
int i=0,f=1;
char c;
for(c=getchar();(c>'9'||c<'0')&&c!='-';c=getchar());
if(c=='-')
f=-1,c=getchar();
for(;c>='0'&&c<='9';c=getchar())
i=(i<<3)+(i<<1)+c-'0';
return i*f;
}
int main(){
T=Read();
while(T--){
n=Read();
for(int i=1;i<=n;++i){
stu[i].a=Read(),stu[i].b=Read();
if(stu[i].a>stu[i].b)
stu[i].x=1;
else{
if(stu[i].a<stu[i].b)
stu[i].x=-1;
else
stu[i].x=0;
}
}
sort(stu+1,stu+n+1);
for(int i=1;i<=n;++i){
stu[i].a+=stu[i-1].a;
stu[i].c=max(stu[i-1].c,stu[i].a)+stu[i].b;
}
cout<<stu[n].c<<'\n';
}
return 0;
}