为什么会出现多1的情况呢,感觉思路没问题
查看原帖
为什么会出现多1的情况呢,感觉思路没问题
1107543
yezhufenglv楼主2024/7/5 21:42

cpp

#include <iostream>
using namespace std;
//找到最小的空旷距离  再小一点就路灯就不够用了
const int  N = 1e7 + 10;
int flag[N];
int main()
{
	int length, pre, goal;
	cin >> length >> pre >> goal;
	int p = 0,mx = 0;
	for (int i = 0; i < pre; i++)
	{
		int temp;
		cin >> temp;
		flag[i] = temp - p;
		mx = max(mx, flag[i]);
		p = temp;
	}
	flag[pre] = length - p;       //最后那个
	mx = max(mx, flag[pre]);
	//现在 flag0-pre 中存放的是各个路标之间的差值
	int l = 0, r = mx;
	while (l < r)
	{
		int mid = l + r >> 1, sum = 0;
		if (mid == 1)
		{
			l = 1; break;
		}
		for (int i = 0; i <= pre; i++)
		{
			sum += flag[i] / mid;
		}
		if (sum > goal)
			l = mid + 1;
		else
			r = mid;
	}
	cout << l << endl;
	return 0;
}

//因为l左边的都是不满足条件的,输出l感觉不应该会出现多1的情况, 测评结果是(https://www.luogu.com.cn/record/164179576)```

2024/7/5 21:42
加载中...