社区讨论

求调(玄关)

学术版参与者 4已保存回复 8

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
8 条
当前快照
1 份
快照标识符
@mhj9398v
此快照首次捕获于
2025/11/03 22:43
4 个月前
此快照最后确认于
2025/11/03 22:43
4 个月前
查看原帖
RT,题目:P5894
CPP
#include <bits/stdc++.h>
using namespace std;
#define int long long
int A, B, n;
int a[100005], b[100005];

struct node {
	int w, s;
	bool operator < (const node &z) const {
		return w < z.w;
	}
} c[1000005];
priority_queue<node> q;

bool cmp(node x, node y) {
	if (x.w != y.w) {
		return x.w < y.w;
	}
	return x.s < y.s;
}

bool check(int x) {
	while (!q.empty()) {
		q.pop();
	}
	int cnt = 1;
	for (int i = 1; i <= A; i++) {
		while (c[cnt].w < a[i]) {
			q.push({c[cnt].w, c[cnt].s});
			cnt++;
		}
		for (int j = 1; j <= x; j++) {
			if (q.empty() == 1) {
				break;
			}
			if (q.top().w < a[i]) {
				q.pop();
			} else {
				break;
			}
		}
	}
	while (cnt <= n) {
		q.push({c[cnt].w, c[cnt].s});
		cnt++;
	}
	for (int i = 1; i <= B; i++) {
		for (int j = 1; j <= x; j++) {
			if (q.empty() == 1) {
				break;
			}
			if (q.top().s < b[i]) {
				q.pop();
			} else {
				break;
			}
		}
	}
	if (q.empty() == 1) {
		return 1;
	} else {
		return 0;
	}
}

signed main() {
	cin >> A >> B >> n;
	for (int i = 1; i <= A; i++) {
		cin >> a[i];
	}
	sort(a + 1, a + A + 1);
	for (int i = 1; i <= B; i++) {
		cin >> b[i];
	}
	sort(b + 1, b + B + 1);
	for (int i = 1; i <= n; i++) {
		cin >> c[i].w >> c[i].s;
	}
	sort(c + 1, c + n + 1, cmp);
	int l = 1, r = 1e5, ans = -1;
	while (l <= r) {
		int mid = (l + r) / 2;
		if (check(mid) == 1) {
			ans = mid;
			r = mid - 1;
		} else {
			l = mid + 1;
		}
	}
	cout << ans;
	return 0;
}

回复

8 条回复,欢迎继续交流。

正在加载回复...