社区讨论
不知道为啥只有80分,求助
P7557 [USACO21OPEN] Acowdemia S参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @m4c5jrm4
- 此快照首次捕获于
- 2024/12/06 10:54 去年
- 此快照最后确认于
- 2025/11/04 13:18 4 个月前
CPP
#include <vector>
#include <iostream>
#include <queue>
#include <algorithm>
#include <set>
#include <map>
#include <cmath>
#include <climits>
#include <stdio.h>
#include <stack>
using namespace std;
bool check(vector<int> &v, int expect, long long sum, int k) {
bool ret = true;
for (int i = v.size() - expect; i < v.size(); ++i) {
if (v[i] >= expect) {
break;
}
int diff = expect - v[i];
if (diff > k || diff > sum || diff > v.size()) {
ret = false;
break;
}
sum -= diff;
}
return ret;
}
int main() {
int N, K, L;
cin >> N >> K >> L;
vector<int> v(N);
for (int i = 0; i < N; ++i) {
cin >> v[i];
}
long long sum = K * L;
sort(v.begin(), v.end());
int left = 0, right = N;
int ans = 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (check(v, mid, sum, K)) {
left = mid + 1;
ans = mid;
} else {
right = mid - 1;
}
}
cout << ans;
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...