用优先队列为什么只能过2个点,求助
查看原帖
用优先队列为什么只能过2个点,求助
666970
djy123456楼主2023/10/16 22:02
#include <bits/stdc++.h> 
using namespace std;
int l, n, Q, x, mid, a[100001];
priority_queue <int, vector<int>, less<int> > q;
int main()
{
	scanf("%d%d%d", &l, &n, &Q);
	for (int i = 1; i <= n; i++)
	{
		scanf("%d", &a[i]);
		q.push(a[i] - a[i - 1]);//将每个点和它之前那个的点的距离存入优先队列 
	}
	q.push(l - a[n]);//特别存入尾端点 
	for (int i = 1; i <= Q; i++)
	{
		x = q.top();//每次去出队首 
		q.pop();
		//将最长的那段分为两段 
		q.push(x / 2);
		q.push(x - x / 2);
	}
	printf("%d\n", q.top());
	return 0;
}```
2023/10/16 22:02
加载中...