首页 > 其他分享 >路标设置(二分答案)

路标设置(二分答案)

时间:2025-01-02 19:40:36浏览次数:1  
标签:二分 arr 路标 big mid int 答案

题目链接:https://www.luogu.com.cn/problem/P3853

题意:给你一段长度,以及一些分割该长度的路标,允许加上k个路标让路标间距离变小,让你求两个路标之间最大的距离

思路:

二分答案,check时把注意力放在相邻的两个路标之间的距离看满不满足你二分出来的答案,如果不满足,就加上路标让其满足(注意:当两路标间距离为答案的倍数(通过取模来判断倍数关系)时路标数要-1)
最后检查加上的路标数和可供你使用的路标数的大小关系,加多了就不行,加少或者一样就行

#include<bits/stdc++.h>
#define int long long 
using namespace std;
int l,n,k;
const int maxn=1e7+5;
int arr[maxn];
int ans;
bool check(int mid)
{
	int temp=0;
	for(int i=0;i<n-1;i++)
	{
		if((arr[i+1]-arr[i])%mid==0)
		{
			temp+=(arr[i+1]-arr[i])/mid-1;
		}
		else{
			temp+=(arr[i+1]-arr[i])/mid;
		}
	}
	return temp>k ? false:true;
}
signed main()
{
	ios::sync_with_stdio(false),cin.tie(0);
	cin>>l>>n>>k;
	int big=0;
	for(int i=0;i<n;i++)
	{
		cin>>arr[i];
		if(arr[i]>big)big=arr[i];
	}
	int l=0;
	int r=big;
	sort(arr,arr+n);
	while(l<=r)
	{
		int mid =l+r >>1;
		if(mid==0)break;
		if(check(mid))
		{
			ans=mid;
			r=mid-1;
		}
		else
		{
			l=mid+1;
		}
	}
	cout<<ans;
	return 0;
}


标签:二分,arr,路标,big,mid,int,答案
From: https://www.cnblogs.com/benscode/p/18648642

相关文章

  • 2025年Java基础面试题,附答案解析。
    1.Java支持多继承么?不支持,Java不支持多继承。每个类都只能继承一个类,但是可以实现多个接口。2.接口和抽象类的区别是什么?Java提供和支持创建抽象类和接口。它们的实现有共同点,不同点在于:接口中所有的方法隐含的都是抽象的。而抽象类则可以同时包含抽象和非抽象的方法。类可......
  • 寻找两个正序数组的中位数(二分查找)
    给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。算法的时间复杂度应该为 O(log(m+n)) 。 示例1:输入:nums1=[1,3],nums2=[2]输出:2.00000解释:合并数组=[1,2,3],中位数2示例2:输入:nums1=[1......
  • 寻找旋转排序数组中的最小值(二分查找)
    已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组。例如,原数组 nums=[0,1,2,4,5,6,7] 在变化后可能得到:若旋转 4 次,则可以得到 [4,5,6,7,0,1,2]若旋转 7 次,则可以得到 [0,1,2,4,5,6,7]注意,数组 [a[0],a[1],a[2],...,a[n-1......
  • Leetcode刷题第三天-二分查找
    162.寻找峰值-力扣(LeetCode)没二分,数组头尾分别插入最小值和最大值,比较num[i-1]<num[i]>num[i+1]classSolution:deffindPeakElement(self,nums:List[int])->int:ifnotnums:returnNonemax_num,min_num=min(nums)-1,min(nums)-1......
  • 搜索插入位置(二分查找)
    给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为 O(logn) 的算法。 示例1:输入:nums=[1,3,5,6],target=5输出:2示例 2:输入:nums=[1,3,5,6],target=2输......
  • Leetcode刷题第二天-二分查找
    33.搜索旋转排序数组-力扣(LeetCode)二分查找的前提条件“数组有序”middle将数组分成左区间[left,middle)和右区间[middle,rigjht)两部分,左区间和右区间必有一个区间为有序区间左区间为有序数组如果middle数据大于target ——> 目标数据在左区间且左区间升序——>正......
  • P1678 烦恼的高考志愿(二分lower_bound)
    题目链接:https://www.luogu.com.cn/problem/P1678题意:对每一个学生找一个和他成绩差值最小的学校,求差值之和思路:贪心+二分查找注意:当lower_bound在数组中找不到大于等于目标值时,会返回其尾迭代器/数组最后的一个元素下标+1因此要特判比较第一个大于等于目标值的元素,与其......
  • java面试题大全及答案
    1、创建线程的三种方式的对比?(1)采用实现Runnable、Callable接口的方式创建多线程。优势是:线程类只是实现了Runnable接口或Callable接口,还可以继承其他类。在这种方式下,多个线程可以共享同一个target对象,所以非常适合多个相同线程来处理同一份资源的情况,从而可以将C......
  • P2765 魔术球问题&&二分图
    题意here思路1根据此题输入m的范围,可以知道此题的答案上限约为5000考虑逆向二分求解(实际上可以直接枚举)2此题可以抽象成在图上求最少链的个数我们把所有数向比他大的、与他的和为平方数的数建边可以看出是二分图最大匹配问题结合图更清晰:此时图上最少链的个数为\(n\)......
  • C++ 电子学会二级2024年12月部分考题答案
    1、逆行描述:网上有个段子说:妻子在家听广播,听到某高速路上有一辆车在逆行,想到丈夫在那条高速上行驶,就打电话对丈夫说:“老公啊,你走的那条高速上有一辆车在逆行,你小心点。”她丈夫说:“何止啊!我看好几百辆车都在逆行!”现在我们查了一下高速公路上拍到的好几百辆车的时速,发现有......