30分求助
查看原帖
30分求助
1098781
封禁用户楼主2024/3/10 18:16

rt,

#include<iostream>
using namespace std;
int l, n, m;
int dis[50050];
inline int read() {
	int x = 0, f = 1;
	char ch = getchar();
	while (ch < '0' || ch > '9') {
		if (ch == '-') f = -1;
		ch = getchar();
	}
	while (ch >= '0' && ch <= '9')
		x = x * 10 + ch - '0', ch = getchar();
	return x * f;
}
int main() {
	l = read(), n = read(), m = read();
	for (int i = 1; i <= n; i++)
		dis[i] = read();
	int L = 0, R = l + 1, mid;
	while (L + 1 < R) {
		mid = L + R >> 1;
		int shitou = 0, juli = dis[0];
		for (int i = 1; i <= n + 1; i++)
			if (dis[i] - juli < mid)//距离小于期望答案
				shitou++;//移走
			else
				juli = dis[i];//下一个石头
		if (shitou <= m)L = mid; //要移的数量小于等于题目要求,说明答案还可以更大
		else R = mid; //答案过大
	}
	cout << L;
	return 0;
}
2024/3/10 18:16
加载中...