P2678求助
  • 板块学术版
  • 楼主xingze
  • 当前回复2
  • 已保存回复2
  • 发布时间2023/8/2 14:32
  • 上次更新2023/11/3 06:22:07
查看原帖
P2678求助
693552
xingze楼主2023/8/2 14:32
#include <iostream>
using namespace std;
const long long MAXN = 1e8 + 50;
long long l, n, m, a[MAXN];
bool op(long long x)
{
	int t = 0;
	int i = 0;
	int now = 0;
	for (int i = 0; i < n + 1; i++)
	{
		if (a[i] - a[now] < x)
			t++;
		else
			now = i;
	}
	if (t > m)
		return false;
	else
		return true;
}
int main()
{
	cin >> l >> n >> m;
	for (int i = 1; i <= n; i++)
	{
		cin >> a[i];
	}
	a[n + 1] = 1;
	long long ll = 1, rr = l;
	while (ll < rr)
	{
		long long mid=(ll+rr)>>1;
		for (int i = 1; i <= n; i++)
		{
			if (op(mid))
			{
				ll = mid+1;
			}
			else
			{
				rr = mid - 1;
			}
		}
	}
	if (!op(l))
	{
		l--;
	}
	cout << ll << endl;
}

测试点

2023/8/2 14:32
加载中...