当前位置: 首页 > news >正文

蓝桥杯算法题:区间移位

题目描述

数轴上有n个闭区间:D1,...,Dn。
其中区间Di用一对整数[ai, bi]来描述,满足ai < bi。
已知这些区间的长度之和至少有10000。
所以,通过适当的移动这些区间,你总可以使得他们的“并”覆盖[0, 10000]——也就是说[0, 10000]这个区间内的每一个点都落于至少一个区间内。
你希望找一个移动方法,使得位移差最大的那个区间的位移量最小。


具体来说,假设你将Di移动到[ai+ci, bi+ci]这个位置。你希望使得maxi{|ci|} 最小。

输入

输入的第一行包含一个整数n,表示区间的数量。
接下来有n行,每行2个整数ai, bi,以一个空格分开,表示区间[ai, bi]。
保证区间的长度之和至少是10000。

输出

输出一个数字,表示答案。如果答案是整数,只输出整数部分。如果答案不是整数,输出时四舍五入保留一位小数。

样例输入

2
10 5010
4980 9980
样例输出 

20

首先说思路,在满足条件的所有值中取最大值,常见的二分问题,而又涉及到区间遍历,可能会有考贪心。这道题,大致看起来,可以按一般贪心的思路,将全部区间按右端点值由小到大排序,然后采用二分,判断mid值是否可以让所有区间通过移位达到连续不断,并且长度大于10000。

①二分:这道题看数据会出现小数,其实最小也就0.5,我看别人的做法是把有关区间以及距离什么的都乘2,这样算出来的mid最小值也就为1,可以用整数二分。但我直接用的实数二分,也是差不多的,可能算的次数会多一点。

②check函数:每次二分,都要判断mid是否满足条件,就要用到check函数。其实我的想法是遍历区间,拿遍历到的某个区间[l,r]跟之前遍历完所有区间形成的右端最大值mr比较,如果l-mid>mr,那说明我往左移也跟前面所有区间形成不了交集,那当然后边的区间也一样,所以直接判断mid不符合要求(当时是这样想的,不过细想其实有错),然后就这样遍历完,如果mr≥10000,不就说明mid可以实现区间移位连续嘛,那就继续二分,直到二分的区间缩成一个值。

但是,最后程序无论怎么改,都只过了九个测试点,挠头

(过九个测试点): 

#include<bits/stdc++.h>
using namespace std;
struct Point{int l,r;Point(int a,int b){l=a,r=b;}friend bool operator<(const Point& p1,const Point& p2){if(p1.r!=p2.r)return p1.r<p2.r;//为什么要优先用r排序?贪心思想, else return p1.l<p2.l;}
};
vector<Point>pv;
bool check(double mid){cout<<mid<<endl;vector<Point>temp(pv);//复制vector来进行模拟double mr=0;//表示所有区间通过不同移动能将右端点扩大到的范围 for(int i=0;i<temp.size();i++){int l=temp[i].l,r=temp[i].r;if(mr+1e-6>l-mid&&mr<r+mid+1e-6){//mr>=l-mid说明可以通过对区间[l,r]进行左移操作实现与原来的区间有交,也就是使整个区间连续,mr<=r+mid是指通过这个区间[l,r]右移,可以实现mr变大,不然处理[l,r]区间又有什么意义呢 if(mr<l){mr=r-l+mr;}else{if(l+mid>mr)mr+=(r-l);else mr+=(r-l-(mr-l-mid));}}if(mr<l-mid)return false;} return mr+1e-6>10000;//循环正常结束也不一定能行,要区间右端最大值大于等于10^4 
}
int main(){//这道题,典型的大于中找最小,大于是指mid超过某一个值,就可以实现所有区间移动覆盖整个范围,最小是指要找的mid要满足条件且最小,直接套模板 int n;cin>>n;int l,r;for(int i=0;i<n;i++){cin>>l>>r;pv.push_back(Point(l,r));}sort(pv.begin(),pv.end()); 
double L=0,R=10000,mid;while(R-L>1e-6){cout<<mid<<" "<<L<<" "<<R<<endl;mid=(L+R)/2;//维护左边if(check(mid)){R=mid;}else{L=mid;}}if(mid>1e-6)cout<<mid<<endl;else cout<<0<<endl;
}

好吧,现在讲讲AC的代码,我当时看别人的题解也好奇,为什么一次遍历的事,他还要加个while循环,这不增加工作量嘛,我绞尽脑汁也想不明白while有什么用处,后边才发现,原来是弥补贪心策略的不足!!!我先举个例子:

对于数据 :

3

1000 2000

800 3000

2200 10000

考虑贪心,区间按右端点值从小到大排吗?这样输出的答案可不对哦,输出的答案会是1000,正确的答案可是800!!!

那要不考虑区间按左端点从大到小排?

对于数据:

3

2 1000

3 8

1002 1000 

按左排输出的答案可就是994了喔!!!所以,我自己也不知道到底要怎样贪心了

可能ac的人也不知道吧,所以他们添了一层循环,为的是保证一个之前没用到的区间,以后还有机会用,这样就加大了正确的可能,毕竟,谁也不知道哪个区间先用上嘛,不同区间用的先后次序不同,可能产生不同结果。

自我安慰:这道题主要考二分,其他不懂的是次要的(好吧,还是自己贪心不行)

所以,要是有更好的策略,可以跟我分享,救救菜狗

(叠甲,这篇博客是在精神不正常状态下写的,语无伦次,看题解可以去那些大佬博客)

 (AC):

#include<bits/stdc++.h>
using namespace std;
struct Point{int l,r;Point(int a,int b){l=a,r=b;}friend bool operator<(const Point& p1,const Point& p2){if(p1.r!=p2.r)return p1.r<p2.r;//为什么要优先用r排序?贪心思想, else return p1.l<p2.l;}
};
vector<Point>pv;
bool check(double mid){vector<Point>temp(pv);//复制vector来进行模拟double mr=0;//表示所有区间通过不同移动能将右端点扩大到的范围 while(true){//避免一些特殊区间影响,弥补贪心的不足bool flag=false;for(int i=0;i<temp.size();i++){int l=temp[i].l,r=temp[i].r;if(mr+1e-6>l-mid&&mr<r+mid+1e-6){//mr>=l-mid说明可以通过对区间[l,r]进行左移操作实现与原来的区间有交,也就是使整个区间连续,mr<=r+mid是指通过这个区间[l,r]右移,可以实现mr变大,不然处理[l,r]区间又有什么意义呢 flag=true;if(mr<l){mr=r-l+mr;}else{if(l+mid>mr)mr+=(r-l);else mr+=(r-l-(mr-l-mid));}temp.erase(temp.begin()+i);break;}} if(!flag||mr+1e-6>10000)break;} return mr+1e-6>10000;//循环正常结束也不一定能行,要区间右端最大值大于等于10^4 
}
int main(){//这道题,典型的大于中找最小,大于是指mid超过某一个值,就可以实现所有区间移动覆盖整个范围,最小是指要找的mid要满足条件且最小,直接套模板 int n;cin>>n;int l,r;for(int i=0;i<n;i++){cin>>l>>r;pv.push_back(Point(l,r));}sort(pv.begin(),pv.end()); 
double L=0,R=10000,mid;while(R-L>1e-6){mid=(L+R)/2;//维护左边if(check(mid)){R=mid;}else{L=mid;}}if(mid>1e-6)cout<<mid<<endl;else cout<<0<<endl;
}

相关文章:

蓝桥杯算法题:区间移位

题目描述 数轴上有n个闭区间&#xff1a;D1,...,Dn。 其中区间Di用一对整数[ai, bi]来描述&#xff0c;满足ai < bi。 已知这些区间的长度之和至少有10000。 所以&#xff0c;通过适当的移动这些区间&#xff0c;你总可以使得他们的“并”覆盖[0, 10000]——也就是说[0, 100…...

提取word文档里面的图片

大家好&#xff0c;我是阿赵。   阿赵我写博客的时候的习惯是&#xff0c;先用word文档写好&#xff0c;然后再把word文档里面的图片另存&#xff0c;最后再在博客里面复制正文和上传图片。   而我写的文章一般配图都比较多&#xff0c;所以经常要做的一个功能就是另存图片…...

MybatisPlus总结

一、MyBatis回顾 &#xff08;1&#xff09;什么是MyBatis&#xff1a;MyBatis 是一款优秀的持久层框架&#xff0c;它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映…...

使用 mitmproxy 抓包 grpc

昨天在本地执行 grpc 的 quick start&#xff08;python版本的&#xff09;&#xff0c;我了解 grpc 内部使用的是 HTTP2&#xff0c;所以我就想着抓包来试试&#xff0c;下面就来记录一下这个过程中的探索。 注意&#xff1a;我的电脑上面安装了 Fiddler Classic&#xff0c;…...

【解决Jetson Nano 内存不足问题】纯命令行将 Conda 环境迁移到 SD 卡

前言 Jetson Nano 板载只有 16GB 的存储空间&#xff0c;在安装完 Ubuntu 和 Conda 环境后&#xff0c;剩余空间就捉襟见肘了&#xff0c;无法满足安装 PyTorch 等大型包的需求。此时如果你有一张SD卡&#xff0c;那么可以考虑将 Conda 环境迁移到 SD 卡上。 但网上的教程基本…...

【RISC-V 指令集】RISC-V 向量V扩展指令集介绍(七)- 向量算术指令格式

1. 引言 以下是《riscv-v-spec-1.0.pdf》文档的关键内容&#xff1a; 这是一份关于向量扩展的详细技术文档&#xff0c;内容覆盖了向量指令集的多个关键方面&#xff0c;如向量寄存器状态映射、向量指令格式、向量加载和存储操作、向量内存对齐约束、向量内存一致性模型、向量…...

顺序表的应用

文章目录 目录1. 基于动态顺序表实现通讯录项目2.顺序表经典算法2.1 [移除元素](https://leetcode.cn/problems/remove-element/description/)2.2 [合并两个有序数组](https://leetcode.cn/problems/merge-sorted-array/description/) 3. 顺序表的问题及思考 目录 基于动态顺序…...

2024-04-03-代码随想录算法训练营第一天[LeetCode704二分查找、LeetCode27移除元素]

文章目录 第一题解法一[左闭右开]解法二[左闭右闭]总结 第二题解法一[暴力解法]解法二[双指针法]总结 第一题 LeetCode704二分查找 解法一[左闭右开] class Solution { public:int search(vector<int>& nums, int target) {int size nums.size();int right size…...

[Go运行问题]/lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_xx‘ not found

问题描述 在一台ubuntu 20的机器上通过go 编译生成的可执行程序(使用了cgo)&#xff0c;在其他ubuntu机器上运行时出现如下问题 /lib/x86_64-linux-gnu/libc.so.6: version GLIBC_2.32 not found 问题分析 因为go代码里的依赖库使用到了sndfile&#xff0c;它必须使用cgo了…...

matrix-breakout-2-morpheus 靶机渗透

信息收集&#xff1a; 1.nmap存活探测&#xff1a; nmap -sn -r 192.168.10.1/24 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-04-06 12:13 CST Nmap scan report for 192.168.10.1 Host is up (0.00056s latency). MAC Address: 00:50:56:C0:00:08 (VMware) Nmap…...

爬虫 新闻网站 以湖南法治报为例(含详细注释) V1.0

目标网站&#xff1a;湖南法治报 爬取目的&#xff1a;为了获取某一地区更全面的在湖南法治报已发布的宣传新闻稿&#xff0c;同时也让自己的工作更便捷 环境&#xff1a;Pycharm2021&#xff0c;Python3.10&#xff0c; 安装的包&#xff1a;requests&#xff0c;csv&#xff…...

物联网实战--入门篇之(十)安卓QT--后端开发

目录 一、项目配置 二、MQTT连接 三、数据解析 四、数据更新 五、数据发送 六、指令下发 一、项目配置 按常规新建一个Quick空项目后&#xff0c;我们需要对项目内容稍微改造、规划下。 首先根据我们的需要在.pro文件内添加必要的模块&#xff0c;其中quick就是qml了&…...

[Java]网络编程

网络编程概述 计算机网络&#xff1a; 把分布在不同地理区域的具有独立功能的计算机,通过通信设备与线路连接起来&#xff0c;由功能完善的软件实现资源共享和信息传递的系统。 Java是 Internet 上的语言&#xff0c;它从语言级上提供了对网络应用程序的支持&#xff0c;程序…...

重读Java设计模式: 适配器模式解析

引言 在软件开发中&#xff0c;经常会遇到不同接口之间的兼容性问题。当需要使用一个已有的类&#xff0c;但其接口与我们所需的不兼容时&#xff0c;我们可以通过适配器模式来解决这一问题。适配器模式是一种结构型设计模式&#xff0c;它允许接口不兼容的类之间进行合作。本…...

MySQL面试题系列-9

MySQL是一个关系型数据库管理系统&#xff0c;由瑞典 MySQL AB 公司开发&#xff0c;属于 Oracle 旗下产品。MySQL是最流行的关系型数据库管理系统之一&#xff0c;在 WEB 应用方面&#xff0c;MySQL是最好的RDBMS (Relational Database Management System&#xff0c;关系数据…...

书生·浦语训练营二期第二次笔记

文章目录 1. 部署 InternLM2-Chat-1.8B 模型进行智能对话1.1 配置环境1.2 下载 InternLM2-Chat-1.8B 模型 2. 实战&#xff1a;部署实战营优秀作品 八戒-Chat-1.8B 模型2.1 配置基础环境2.2 使用 git 命令来获得仓库内的 Demo 文件&#xff1a;2.3 下载运行 Chat-八戒 Demo 3. …...

python_3

文章目录 题目运行结果模式A模式B模式C模式D 题目 mode input("请选择模式:") n int(input("请输入数字:"))if mode "A" or mode "a":# 模式A n:输入的层数 i:当前的层数# 每行数字循环次数 ifor i in range(1, n 1):for j in r…...

【Python】 使用Apache Tika和Python实现zip、csv、xls等多格式文件文本内容提取

时间的电影 结局才知道 原来大人已没有童谣 最后的叮咛 最后的拥抱 我们红着眼笑 我们都要把自己照顾好 好到遗憾无法打扰 好好的生活 好好的变老 好好假装我 已经把你忘掉 &#x1f3b5; 五月天《好好》 在进行数据分析、搜索引擎优化或任何需要处理大量…...

C语言如何将多维数组名作为函数参数?

一、问题 ⼦函数执⾏时&#xff0c;整个多维数组是由主函数决定的&#xff0c;这时就要把多维数组的数组名作为函数参数传递给⼦函数。那么在C程序中&#xff0c;怎样将多维数组名作函数参数进⾏传递&#xff1f; 二、解答 以⼆维数组为例&#xff0c;其格式如下。 形参定义&…...

2013年认证杯SPSSPRO杯数学建模C题(第二阶段)公路运输业对于国内生产总值的影响分析全过程文档及程序

2013年认证杯SPSSPRO杯数学建模 C题 公路运输业对于国内生产总值的影响分析 原题再现&#xff1a; 交通运输作为国民经济的载体&#xff0c;沟通生产和消费&#xff0c;在经济发展中扮演着极其重要的角色。纵观几百年来交通运输与经济发展的相互关系&#xff0c;生产水平越高…...

《LeetCode力扣练习》代码随想录——二叉树(合并二叉树---Java)

《LeetCode力扣练习》代码随想录——二叉树&#xff08;合并二叉树—Java&#xff09; 刷题思路来源于 代码随想录 617. 合并二叉树 二叉树-前序遍历 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode…...

openstack云计算(二)——使用Packstack安装器安装一体化OpenStack云平台

初步掌握OpenStack快捷安装的方法。掌握OpenStack图形界面的基本操作。 一【准备阶段】 &#xff08;1&#xff09;准备一台能够安装OpenStack的实验用计算机&#xff0c;建议使用VMware虚拟机。 &#xff08;2&#xff09;该计算机应安装CentOS 7&#xff0c;建议采用CentO…...

Flutter Don‘t use ‘BuildContext‘s across async gaps.

Flutter提示Don‘t use ‘BuildContext‘s across async gaps.的解决办法—flutter里state的mounted属性...

基于SSM+Jsp+Mysql的个性化影片推荐系统

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…...

循环队列的实现及应用——桶排序bucket_sort、基数排序radix_sort

一、循环队列的实现 代码解释 1、完成初始化 2、定义方法 3、测试实例 4、完整代码 class AQueue:def __init__(self, size=10):self.__mSize = sizeself.__front=0self.__rear = 0self.__listArray = [None] * size#清空元素def clear(self):self.__front = 0self.__rear =…...

ubuntu16如何使用高版本cmake

1.引言 最近在尝试ubuntu16.04下编译开源项目vsome&#xff0c;发现使用apt命令默认安装cmake的的版本太低。如下 最终得知&#xff0c;ubuntu16默认安装确实只能到3.5.1。解决办法只能是源码安装更高版本。 2.源码下载3.20 //定位到opt目录 cd /opt 下载 wget https://cmak…...

电商-广告投放效果分析(KMeans聚类、数据分析-pyhton数据分析

电商-广告投放效果分析&#xff08;KMeans聚类、数据分析&#xff09; 文章目录 电商-广告投放效果分析&#xff08;KMeans聚类、数据分析&#xff09;项目介绍数据数据维度概况数据13个维度介绍 导入库&#xff0c;加载数据数据审查相关性分析数据处理建立模型聚类结果特征分析…...

练习 16 Web [极客大挑战 2019]LoveSQL

extractvalue(1,concat(‘~’, (‘your sql’) ) )报错注入&#xff0c;注意爆破字段的时候表名有可能是table_name不是table_schema 有登录输入框 常规尝试一下 常规的万能密码&#xff0c;返回了一个“admin的密码”&#xff1a; Hello admin&#xff01; Your password is…...

C++——栈和队列容器

前言&#xff1a;这篇文章我们将栈和队列两个容器放在一起进行分享&#xff0c;因为这两个要分享的知识较少&#xff0c;而且两者在结构上有很多相似之处&#xff0c;比如栈只能在栈顶操作&#xff0c;队列只能在队头和队尾操作。 不同于前边所分享的三种容器&#xff0c;这篇…...

Java集合(个人整理笔记)

目录 1. 常见的集合有哪些&#xff1f; 2. 线程安全的集合有哪些&#xff1f;线程不安全的呢&#xff1f; 3. Arraylist与 LinkedList 异同点&#xff1f; 4. ArrayList 与 Vector 区别&#xff1f; 5. Array 和 ArrayList 有什么区别&#xff1f;什么时候该应 Array而不是…...

wordpress菜单移到右边/企业管理培训班哪个好

《计算机系统维护》摘要本篇论文主要介绍了以下相关内容&#xff1a;1、计算机硬件的配臵现状&#xff0c;主要硬件如CPU,主板&#xff0c;内存等的相关配臵&#xff1b;以及他们的发展及保养。2、软件系统的日常维护&#xff0c;即操作系统的选择与安装&#xff1b;防护软件及…...

做直播的小视频在线观看网站/产品推广介绍怎么写

目录 Python基础小结一.执行Python程序的两种方式1.1交互式1.2 命令行式二、执行Python程序的两种IDE2.1 Pycharm2.3 Jupyter三.变量3.1 什么变量&#xff1f;3.2 变量的组成?3.3 变量名的定义规范3.4 定义变量的两种方式3.5 常量四、注释4.1单行注释4.2 多行注释4.3 引用计数…...

wix建设网站教程/泉州关键词快速排名

2019独角兽企业重金招聘Python工程师标准>>> 最大熵原理 最大熵原理是在1957 年由E.T.Jaynes 提出的&#xff0c;其主要思想是&#xff0c;在只掌握关于未知分布的部分知识时&#xff0c;应该选取符合这些知识但熵值最大的概率分布。因为在这种情况下&#xff0c;符…...

wordpress博客主题制作/编程培训机构加盟哪家好

网传2017春节快递停运时间表&#xff1a; 网络上疯传的2017春节快递停运时间表 “2017年快递停运春节放假时间通知”是真的&#xff1f; 2017年春节期间快递真的停运吗 ❤❤❤喜讯&#xff1a;2017年春节期间快递不放假❤❤❤ 近日&#xff0c;一张“2017春节快递放假时间安排…...

成都网站排名/百度推广助手app

这两年淘宝为了跟进拼多多&#xff0c;一直在发展客户拉客户&#xff0c;和淘宝客拉客户的模式&#xff0c;也出了不少政策。我身边也有不少人像题主的朋友一样&#xff0c;通过做淘客赚到了钱。看到这里&#xff0c;肯定会有人质疑&#xff0c;淘宝客玩法早就过时了&#xff0…...

新乡网站建设那家好/百度信息流投放

先把软件安装好&#xff0c;然后可以参考&#xff1a;srvctl常用命令分类&#xff1a;*增加 oracle asm/database/listener 注册信息eg&#xff1a;srvctl add asm -l LISTENER -p crs/dbserve-cluster/ASMPARAMETERFILE/registry.253.743836405eg: srvctl add database -d orc…...