跪求各位大佬!100分最后那个加强点没过(注释掉的while能过是为啥啊)
查看原帖
跪求各位大佬!100分最后那个加强点没过(注释掉的while能过是为啥啊)
1049817
osun楼主2023/11/2 19:38
#include<iostream>

using namespace std;
int len, n, m;
const int M = 1e5 + 9;
int a[M]; 
int s[M];
int ma = -1;
bool check(int x) {
	int ret = 0;
	for (int i = 1; i <= n; i++) {
		if (s[i] > x) {
			ret++;
			int num = s[i] - x;
			while (num > x) { ret++; num -= x; }
		}
	}
	if (ret <= m)return true;
	else return false;
}

int main()
{
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	cin >> len >> n >> m;
	for (int i = 1; i <= n; i++) cin >> a[i];
	for (int i = 1; i <= n; i++) {
		s[i] = a[i] - a[i - 1];
	}
	int j = 0; int k = len;
	while (j < k) {
		int mid = j + k >> 1;
		if (check(mid))k = mid;
		else j = mid + 1;
	}/*
	while (j + 1 < k) {
		int mid = (j + k) >> 1;
		if (check(mid)) k = mid;
		else j = mid;
	}*/
	cout << k;
	return 0;
}

2023/11/2 19:38
加载中...