【蓝桥杯有点意思】区间移位 二分答案

本文介绍了蓝桥杯比赛中的一个区间移位问题,该问题可以通过二分法来解决。作者指出,由于题目描述的实际性,难度相对适中。文章详细阐述了使用二分查找策略来检查解决方案的正确性,并提供了check()函数的代码分析。通过按右端点排序区间并找到最接近的未覆盖位置进行移动,可以确保移动距离最小。在check()函数中,通过讨论不同情况确定如何覆盖区间,并确保不会重复覆盖。最终,通过扩大数值规模来处理可能出现的小数答案。
摘要由CSDN通过智能技术生成

题目链接戳这里

前言

蓝桥杯的题目真有意思。
题目比较实际化,所以这个题目的难度也就一般般,因为动手画画就能画出来。这个题是B组决赛最后一题吧。总感觉省赛的题目比较难


正文

这个题目的问法就很二分,我们直接二分起来。
check()中有贪心的成分,所以算法的正确性我确实证明不出来。然后他可以AC啊

直观上看,我们按右端点排序,然后移动到比较靠近没有覆盖的地方,就可以了。这样因为是有序的区间,所以移动的距离也是最小的。

我们怎么check()呢?
我先放上check()的代码,然后逐条解读:

bool check(int x)
{
   
	int k = 0;
	vector<node> tmp(reg);
	while(true)
	{
   
		bool found = false;
		for(int i=0;i<tmp.size();i++)
		{
   
			node now = tmp[i];
			int ta = now.a;
			int tb = now.b;
			if(ta-x<=k && tb+x>=k)
			{
   
				found = true;
				int len = tb-ta;
				if(ta
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值