1 条题解
-
0
暑假好无聊,来发一个题解。
思路
我们可以将宝箱和钥匙强度从大到小排序,然后尝试用最强的钥匙开最强的宝箱:
- 如果用最强的钥匙都开不了这个宝箱,只能放弃这个宝箱,尝试开第二强的宝箱。
- 否则,就用这把钥匙开箱。换下一把钥匙和下一个宝箱。
代码如下:
#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
- 上传者