我是靠谱客的博主 可爱康乃馨,最近开发中收集的这篇文章主要介绍Codeforces 1260D A Game with Traps(二分查找),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

思路:

1.首先贪心,我们肯定需要从 d d d大的怪物开始消灭;
2.设自己在 t t t的限制内可以消灭所有 d d d大于 r s rs rs的怪物,我们二分查找出最小的 r s rs rs,然后遍历整个士兵数组查询哪些士兵符合就ok了~

代码:

#include<bits/stdc++.h>
using namespace std;
const int MAX_N = 2e5 + 5;
int m, n, k, t;
int a[MAX_N], l[MAX_N], r[MAX_N], d[MAX_N];
bool ok(int val) {
vector<int> v(n + 1);
for (int i = 0; i < k; i++) if (d[i] > val) {
v[l[i] - 1]++;
v[r[i]]--;
}
for (int i = 1; i <= n; i++) v[i] += v[i - 1];
int ans = n + 1;
for (int i = 0; i <= n; i++) if (v[i]) ans += 2;
//	cerr << val << ' ' << ans << endl;
return ans <= t;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
cin >> m >> n >> k >> t;
for (int i = 0; i < m; i++) cin >> a[i];
for (int i = 0; i < k; i++) cin >> l[i] >> r[i] >> d[i];
int lf = 0, rt = MAX_N, rs = -1;
while (lf <= rt) {
int mid = (lf + rt) >> 1;
if (ok(mid)) rs = mid, rt = mid - 1;
else lf = mid + 1;
}
int ans = 0;
for (int i = 0; i < m; i++) if (a[i] >= rs) ans++;
cout << ans;
return 0;
}

最后

以上就是可爱康乃馨为你收集整理的Codeforces 1260D A Game with Traps(二分查找)的全部内容,希望文章能够帮你解决Codeforces 1260D A Game with Traps(二分查找)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部