「题解」:X国的军队
问题 A: X国的军队
时间限制: 1 Sec 内存限制: 256 MB
题面
题面谢绝公开。
题解
简单贪心。
按照存活的士兵数量(即参加战斗的士兵数量减去阵亡的士兵数量)排序。
若存活士兵数量相同则按照参与战斗的士兵数量排序。
顺序扫一遍统计答案。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include<bits/stdc++.h> #define int long long #define rint register int #define read(A) A=init() using namespace std; inline int init() { int a=0,b=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')b=-1;ch=getchar();} while(ch>='0'&&ch<='9'){a=(a<<3)+(a<<1)+ch-'0';ch=getchar();} return a*b; } int T,n,ans; struct node{int ds,ns,cs;}p[1000005]; inline bool cmp(node A,node B){ return (A.cs==B.cs)?A.ns<B.ns:A.cs<B.cs; } signed main() { // freopen("data.in","r",stdin); // freopen("std.out","w",stdout); read(T); while(T--) { read(n);ans=0; for(rint i=1,ind,inn;i<=n;++i) { read(ind),read(inn); p[i].ds=ind,p[i].ns=inn; p[i].cs=inn-ind; } sort(p+1,p+n+1,cmp);ans=p[1].ns; for(rint i=2;i<=n;++i)ans=max(ans+p[i].ds,p[i].ns); printf("%lld\n",ans); } }