1 条题解

  • 0
    @ 2026-8-17 14:51:42

    暑假好无聊,来发一个题解。

    思路

    我们可以将宝箱和钥匙强度从大到小排序,然后尝试用最强的钥匙开最强的宝箱:

    • 如果用最强的钥匙都开不了这个宝箱,只能放弃这个宝箱,尝试开第二强的宝箱。
    • 否则,就用这把钥匙开箱。换下一把钥匙和下一个宝箱。

    代码如下:

    #include <iostream>
    #include <vector>
    #include <algorithm>
    using namespace std;
    int main() {
        ios::sync_with_stdio(false);
        cin.tie(0);
    
        int N,M;
        cin >> N >> M;
        vector <int> C(N),R(M);
    
        for(int i = 0; i < N; i++) cin >> C[i];
        for(int i = 0; i < M; i++) cin >> R[i];
    
        sort(C.rbegin(),C.rend()); //将宝箱和钥匙强度降序排序
        sort(R.rbegin(),R.rend());
    
        int i = 0, j = 0; //i指向宝箱,j指向钥匙
        int cnt = 0;
    
        while (i < N && j < M) {
            if (R[j] >= C[i]) //如果当前钥匙能开当前宝箱
                cnt++,i++,j++; //计数器加一,换下一个钥匙和宝箱
            else
                i++; //否则只能换下一个宝箱
        }
    
        cout << cnt << endl;
        
        return 0;
    }
    
    • 1

    信息

    ID
    96
    时间
    1000ms
    内存
    256MiB
    难度
    3
    标签
    递交数
    257
    已通过
    35
    上传者