建议加强数据
查看原帖
建议加强数据
580804
Deepppp楼主2025/8/1 15:34

如题

#include<iostream>
using namespace std;

int a[50005]; // 石头可以放置的位置

int find(int n, int num, int MAX) { //可以放石头位置的最大索引,石头个数,两块石头之间的最大距离
	int MIN = 1; //可能的距离是1~MAX
	while(MAX > MIN) {
		int mid = MAX - (MAX - MIN) / 2;
		int pre = 0;
		int now = pre+1;
        int remain = num;
		while(remain > 0) {
			while(a[now]-a[pre] < mid && now < n) now++;
			if(a[now] - a[pre] >= mid) {
				remain--;
				pre = now;
				now++;
			}else break;
		}
		if(remain == 0) MIN = mid;
		else MAX = mid-1;
	}
	return MIN;
}

int main() {
	int l, n, m;
	cin >> l >> n >> m;

	for(int i = 1; i <= n; i++) cin >> a[i];
	a[0] = 0;

	int MAX = l/(n-m+1);
	cout << find(n, n-m, MAX);
	return 0;
}

代码没有考虑最后一块石头到终点的距离但是已AC

2025/8/1 15:34
加载中...