abc245_e Wrapping Chocolate
题意:给N个巧克力和M个盒子,它们有长和宽,问是否能给每个巧克力分配一个装得下的盒子。
考虑贪心,为了找到当前最贪心的那个盒子,可以把盒子和巧克力都按宽度降序排序,对每一个巧克力,把所有宽度不小于当前巧克力的盒子放进multiset,找到第一个长度不小于巧克力的,然后从multiset中删去这个盒子。
//
// Created by vv123 on 2022/3/26.
//
/*
#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
int a[N], b[N], c[N], d[N], n, m;
vector<pair<int, int> > obj, box;
int main() {
cin >> n >> m;
for (int i = 1; i <= n; i++) cin >> a[i];
for (int i = 1; i <= n; i++) cin >> b[i];
for (int i = 1; i <= m; i++) cin >> c[i];
for (int i = 1; i <= m; i++) cin >> d[i];
for (int i = 1; i <= n; i++) obj.push_back({a[i], b[i]});
for (int i = 1; i <= m; i++) box.push_back({c[i], d[i]});
sort(obj.begin(), obj.end());
sort(box.begin(), box.end());
int p = 0;
for (int i = 0; i < n; i++) {
while(p < m && (box[p].first < obj[i].first || box[p].second < obj[i].second))
p++;
//printf("%d %d\n", i, p);
if (p >= m) {
puts("No");
return 0;
}
else p++;
//printf("%d{%d,%d} settled\n", p-1, box[p-1].first, box[p-1].second);
}
puts("Yes");
return 0;
}
*/
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
multiset<int> s;
vector<pair<int, int> > obj(n), box(m);
for (int i = 0; i < n; i++) cin >> obj[i].first;
for (int i = 0; i < n; i++) cin >> obj[i].second;
for (int i = 0; i < m; i++) cin >> box[i].first;
for (int i = 0; i < m; i++) cin >> box[i].second;
sort(obj.rbegin(), obj.rend());
sort(box.rbegin(), box.rend());
int p = 0;
for (int i = 0; i < n; i++) {
auto[w, h] = obj[i];
while(p < m && box[p].first >= w)
s.insert(box[p++].second);
auto it = s.lower_bound(h);
if (it == s.end()) {
puts("No");
return 0;
}
s.erase(it);
}
puts("Yes");
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架