1 条题解

  • 0
    @ 2025-8-24 23:00:42

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar 封禁用户
    None

    搬运于2025-08-24 23:00:42,当前版本为作者最后更新于2024-07-09 17:32:01,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    题目传送门

    作为这道题除出题人外的首个 AC 而且代码长度比出题人短,来写篇题解。


    直接暴力对于 n105n\le 10^5 肯定不行,考虑优化。

    首先将所有剑按照攻击力从大到小排序,如果攻击力相同则按防御力从大到小排序,这样一来任何一把剑后面的剑的攻击力都会比它小。然后对于每一把剑,如果这把剑的防御力大于之前的最大防御力,那么这把剑就是有用的,因为它没有在任何方面被后面的剑所超越,然后更新最大防御力,最后输出答案。

    #include <iostream>
    #include <algorithm>
    using namespace std;
    
    const int N = 1e5 + 10;
    
    struct Node {
        int a, b;
    } p[N];
    
    bool cmp(Node x, Node y) {
        if (x.a != y.a)
            return x.a > y.a;
        return x.b > y.b;
    }
    
    int main() {
        int n;
        cin >> n;
        for (int i = 1; i <= n; i++)
            cin >> p[i].a >> p[i].b;
        sort(p + 1, p + 1 + n, cmp);
        int ans = 0, mx = 0;
        for (int i = 1; i <= n; i++)
            if (p[i].b > mx)
                ans++, mx = p[i].b;
        cout << ans;
        return 0;
    }
    
    • 1

    信息

    ID
    10007
    时间
    1000ms
    内存
    1024MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者