题解 | #牛牛国的战争#

牛牛国的战争

https://ac.nowcoder.com/acm/problem/235611

//面对每一次的敌人,如果有可以将敌人打到的军队那么选刚好防御力够存活下来的那一个。
//如果能打到敌人但是确是去送死的话,那么选防御力最差的那一个。
//如果不能打倒敌人那么直接宣布失败就可以。
//首先使用结构体数组对其进行相应的排序,然后将攻击力满足的防御力放入multiset(利用set里面默认从小到大排序的性质)里面,通过自带的二分查找的函数找到相应的防御力。(这一步直接将攻击力与防御力分开的做法是方便代码编写以及提升速度的关键)。
#include <bits/stdc++.h>


using namespace std;
#define int long long
struct Node {
    int a,d;
};
const int maxn = 100000+10;
int cnt = 1;

Node niu[maxn];
Node di[maxn];
//对于敌人来说,要首先按照防御力从大到小排序,然后按照攻击力从小到大排序
bool comp1(Node n1, Node n2) {
    if (n1.d==n2.d) return n1.a<n2.a;
    return n1.d>n2.d;
}
//对于牛牛国部队来说首先按照攻击力从大到小排序,然后按照防御力从小到大排序。
bool comp2(Node n1, Node n2) {
    if (n1.a==n2.a) return n1.d<n2.d;
    return n1.a>n2.a;
}

void solve() {
    int n, m;
    
    multiset<int> ms;
    cin>>n>>m;
    int ans = n;
    for (int i=0;i<n;i++) {
        cin>>niu[i].a>>niu[i].d;
    }
    for (int i=0;i<m;i++) {
        cin>>di[i].a>>di[i].d;
    }
    sort(di, di+m, comp1);
    sort(niu, niu+n, comp2);
    for (int i=0, j=0;i<m;i++) {
        //将攻击力满足的牛牛国的军队的防御力全部放进multiset里面。
        while (j<n&&niu[j].a>=di[i].d) {
            ms.insert(niu[j].d);
            j++;
        }
        if (ms.empty()) {
            printf("Case #%d: %d\n", cnt, -1);
            return ;
        }
        //二分去查找对应的防御力
        multiset<int>::iterator it = ms.upper_bound(di[i].a);
        if (it==ms.end()) {
            ans--;
            //从小到大排序的,删除第一个。
            ms.erase(ms.begin());
        } else {
            ms.erase(it);
        }
    }
    printf("Case #%d: %d\n", cnt, ans);
    return ;
}

signed main() {
    int T;
    cin>>T;
    while(T--) {
        solve();
        cnt++;
    }
    return 0;
}

全部评论

相关推荐

来个厂收我吧:首先,市场侧求职我不是很懂。 但是,如果hr把这份简历给我,我会觉得求职人不适合做产品经理。 问题点: 1,简历的字体格式不统一,排版不尽如人意 2,重点不突出,建议参考star法则写个人经历 3,印尼官方货币名称为印度尼西亚卢比(IDR),且GMV690000印尼盾换算为305人民币,总成交额不高。 4,右上角的意向职位在发给其他公司时记得删除。 5,你所有的经历都是新媒体运营,但是你要投市场营销岗位,jd和简历不匹配,建议用AI+提示词,参照多个jd改一下经历内容。 修改建议: 1,统一字体(中文:思源黑体或微软雅黑,英文数字:time new romans),在word中通过表格进行排版(b站学) 2,校招个人经历权重:实习经历=创业经历(大创另算)>项目经历>实训经历>校园经历 3,请将项目经历时间顺序改为倒序,最新的放最上方。 4,求职方向不同,简历文字描述侧重点也需要不同。
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
2
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务