建议添加一组样例
查看原帖
建议添加一组样例
1108170
wind_913楼主2025/1/25 00:21

我的代码过不了

//1 1
//1

这个样例,但是满分

#include <bits/stdc++.h>

using namespace std;
const int N = 1e5 + 10;
int n, k, a[N];
int main() {
	cin >> n >> k;
	for (int i = 0; i < n; i++) cin >> a[i];
	sort(a, a + n);
	int ll = 0, rr = a[n - 1], res = ll + rr >> 1, ans = 0;
//直接跳过循环了
	while (ll + 1 < rr) {
		res = ll + rr >> 1;
		int l = -1, r = n;
		while (l + 1 < r) {
			int mid = l + r >> 1;
			if (a[mid] >= res) r = mid;
			else l = mid;
		}
		long long sum = 0;
		for (int i = r; i < n; i++) 
			sum += a[i] / res;
		if (sum >= k) ll = res, ans = max(ans, res); 
		else rr = res;
	}
	cout << ans;
    return 0;
}

改正之后的代码:

#include <bits/stdc++.h>

using namespace std;
const int N = 1e5 + 10;
int n, k, a[N];
int main() {
	cin >> n >> k;
	for (int i = 0; i < n; i++) cin >> a[i];
	sort(a, a + n);
//结果集为[1,a[n - 1],初值设为边界
	int ll = 0, rr = a[n - 1] + 1, res = ll + rr >> 1, ans = 0;
	while (ll + 1 < rr) {
		res = ll + rr >> 1;
		if(res == 0) break;//加个特判
		int l = -1, r = n;
		while (l + 1 < r) {
			int mid = l + r >> 1;
			if (a[mid] >= res) r = mid;
			else l = mid;
		}
		long long sum = 0;
		for (int i = r; i < n; i++) 
			sum += a[i] / res;
		if (sum >= k) ll = res, ans = max(ans, res); 
		else rr = res;
	}
	cout << ans;
    return 0;
}
2025/1/25 00:21
加载中...