好心人,看一下哪里错了啊,20分,急急急
查看原帖
好心人,看一下哪里错了啊,20分,急急急
866969
telankesi楼主2022/12/25 18:57
#include <stdio.h>
int L, n, k;
long long d[100010];
int fun(int x) {
	int  num = 0, i = 0,now=0;
	while (i <= n) {
		i++;
		if (d[i] - d[now] > x) {
			num+=open(d[i] - d[now], x);
			now = i;
		}
		else now = i;
	}
	return num;
}
int open(int x,int y) {
	if (x <= y)return 0;
	else {
		if (x % 2 == 0)
			return open(x / 2, y) * 2 + 1;
		else return open(x / 2, y) + open(x / 2 + 1, y)+1;
	}
}
int main() {
	
	scanf("%d %d %d", &L, &n, &k);
	int max = 0;
	for (int i = 1; i <= n; i++) {
		scanf("%d", &d[i]);
		if (max < d[i])max = d[i];
	}
	d[n+1] = L;
	int r = max, l = 1,t;
	while (l <= r) {
		t = (r + l) / 2;
		if (fun(t) >k)l = t + 1;
		else  r = t -1;
	}
	printf("%d", l);
	return 0;

}
2022/12/25 18:57
加载中...