「题解」:X国的军队

问题 A: X国的军队

时间限制: 1 Sec  内存限制: 256 MB

题面


题面谢绝公开。

题解


简单贪心。

按照存活的士兵数量(即参加战斗的士兵数量减去阵亡的士兵数量)排序。

若存活士兵数量相同则按照参与战斗的士兵数量排序。

顺序扫一遍统计答案。

#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);
    }
}
View Code
posted @ 2019-10-01 21:48  hzoi_Joe  阅读(314)  评论(0编辑  收藏  举报