P2123皇后游戏
参考题解
#include <iostream>
#include <algorithm>
using namespace std;int T;
int n;
long long res;struct Person
{int a,b,d;
}p[20005];bool person_cmp(const Person& x,const Person& y)
{if(x.d == y.d){if(x.d < 0)return x.a < y.a;else if(x.d == 1)return x.b > y.b;elsereturn x.a < y.a;//很奇怪,这里按照题解说法随便排则会出问题,写true会RE两个然后一个超时,写false和这里这个写法就能AC}elsereturn x.d < y.d;
}void queenGame()
{res = 0;scanf("%d",&n);for(int k = 0 ; k < n ; k++){scanf("%d%d",&p[k].a,&p[k].b);p[k].d = p[k].a - p[k].b;if(p[k].d > 0) p[k].d = 1;else if(p[k].d < 0) p[k].d = -1;}sort(p,p+n,person_cmp);long long sum_a = 0;for(int k = 0 ; k < n ; k++){sum_a += p[k].a;res = max(res,sum_a)+p[k].b;}printf("%lld\n",res);
}int main()
{scanf("%d",&T);while(T > 0){T--;queenGame();}
}