lanqiao OJ 111 区间位移

简介: lanqiao OJ 111 区间位移

1.区间移位 - 蓝桥云课 (lanqiao.cn)

二分+贪心,  二分和贪心总是同时出现嘛  , 二分倒是简单,贪心总是很难证明也很难想到,

参考一下这两个博客

蓝桥杯历年真题——区间位移——JAVA 详解_蓝桥杯 区间位移-CSDN博客

蓝桥杯国赛第八届c++ A组 区间移位_数轴上有n个闭区间d1,…,dn。其中区间di用一对整数[ai, bi]来描述,满足ai < bi。-CSDN博客

#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std ;
const int N = 1e4 + 10 ;
struct node{
  int a,b ;
  node(int aa, int bb){
    a = aa, b = bb ;
  }
};
bool cmp(node q,node w){
  return q.b < w.b ;
}
int n ;
vector<node> q ;
bool check(int mid){//先找出一个mid值
  int pos = 0 ;
  vector<node> temp(q) ;//复制原来数组,因为我们后边会对数组中的某些个点进行清楚,为了不影响下一次二分,我们用这个复制数组来操作
  while(1){
    bool flag = false ;//如果循环结束后还是false 说明区间有了不能补上的空点,如果还没有到达最后的点20000直接返回0 ;
    for(int i = 0 ; i < temp.size() ; i++ ){//从头到尾遍历每一个区间,如果又符合条件的就把这个区间放上去,对pos值进行修改
      int na = temp[i].a , nb = temp[i].b ;
      int len = nb - na ;//当前区间左端,右端,长度
      if(na - mid <= pos && nb + mid >= pos){//当前pos 在区间内,或者在移动后区间内,这样的区间符合条件
        flag = 1 ;//找到一个符合条件的区间了,进行下一次循环
        //两种情况的pos的值的更新
                if(na + mid >= pos) pos += len ; // 1.最左端移动小于等于mid就可以到达pos,那pos直接加上区间长度len
        else pos = nb + mid ;//2.最左端移动了mid了,但是还不到不了pos,就只能让去掉重复的那一块了,
        temp.erase(temp.begin()+i) ;//避免区间重复判断
        break; //找到一个符合的了,重新开始从头找
      }
    }
    if(pos>=20000 || !flag) break ;
  }
  return pos >= 20000 ;
}
int main(){
  cin >> n ;
  for(int i = 0 ; i < n ;i  ++){
    int a, b ;
    cin >> a >> b ; a*=2,b*=2 ;
    q.push_back(node(a,b)) ;
  }
  sort(q.begin(),q.end(),cmp) ; // 这是vector 的排序方法,一定要记住
  int l = 0 , r = N ;
  while(l<r){//二分
    int mid = l + r  >> 1 ;
    if(check(mid)) r = mid ;
    else l = mid + 1 ;
  }
  cout << ((double)r ) / 2 << endl ;//因为刚开是把数组都扩展了一倍,所以数组先都乘2
}
目录
相关文章
|
数据可视化 Linux 数据库
来了!HelloGitHub 年度热门开源项目
本期为HelloGitHub 年度盘点,为了满足不同读者的需求,作者将内容分为 Top10 和 精选 两部分
|
存储 SQL 缓存
使用实践:Hologres对接MaxCompute常见问题排查
本文总结了Hologres对接MaxCompute时的常见问题与处理方法。
3841 3
使用实践:Hologres对接MaxCompute常见问题排查
|
分布式计算 数据挖掘 云计算
CCF推荐C类会议和期刊总结:(计算机体系结构/并行与分布计算/存储系统领域)
中国计算机学会(CCF)在计算机体系结构、并行与分布计算、存储系统领域推荐了一系列C类会议和期刊。此汇总涵盖了各期刊和会议的全称、出版社、dblp文献网址及研究领域,为学者和研究人员提供了重要的学术交流资源。列表包括《ACM Journal on Emerging Technologies in Computing Systems》、《Concurrency and Computation: Practice and Experience》等期刊,以及ISPA、CCGRID等会议。这些资源对推动领域内的学术交流和技术进步具有重要意义。
CCF推荐C类会议和期刊总结:(计算机体系结构/并行与分布计算/存储系统领域)
|
存储 缓存 NoSQL
了解Redis,第一弹,什么是RedisRedis主要适用于分布式系统,用来用缓存,存储数据,在内存中存储那么为什么说是分布式呢?什么叫分布式什么是单机架构微服务架构微服务的本质
了解Redis,第一弹,什么是RedisRedis主要适用于分布式系统,用来用缓存,存储数据,在内存中存储那么为什么说是分布式呢?什么叫分布式什么是单机架构微服务架构微服务的本质
|
存储 数据可视化 索引
如何使用Python的Statsmodels库进行时间序列分析?
如何使用Python的Statsmodels库进行时间序列分析?
260 0
|
机器学习/深度学习 人工智能 运维
智能运维:未来趋势下的自动化与人工智能融合
【8月更文挑战第18天】 在数字化浪潮中,智能运维(AIOps)作为一股不可逆转的力量,正逐步改写传统运维的脚本。本文将探讨AIOps的核心要素、实施路径和面临的挑战,同时分享个人从新手到专家的心路历程,旨在启发读者思考如何在这一领域内持续成长并作出贡献。
578 6
个人网站接入Google Ads的一点心得
这篇内容是一个关于将Google Ads集成到个人网站的简要经验分享。作者提到在网站上添加Google Ads的初步成效虽低,但作为起点尚可。文章介绍了开始步骤,包括拥有一个网站、注册Google Ads账户,并推荐了一个YouTube视频教程。网站需经过审批,通常要求至少15篇正规文章和6个月的域名注册,但有时新域名也能通过。验证方法包括使用ads.txt文件,遇到问题时可能需要手动检查。子域名的广告审批是自动的。放置广告可以选择自动或手动广告单元,作者建议结合使用。文章还提到了广告屏蔽和管理,以确保合规性。最后,作者分享了自己集成Google Ads的心得体会。
714 3
|
Java Apache Maven
Maven 的Could not calculate build plan错误解决方法(不一定适用,看原因)
Maven 的Could not calculate build plan错误解决方法(不一定适用,看原因)
|
消息中间件 NoSQL 安全
javpower:后端技术革新的开源之旅
🌟 Java后端开发者javpower热衷于开源项目,分享AI、Git、Redis等领域的知识和工具,如JavaVision、EasyGit。擅长JVM优化、数据库事务处理、微服务架构等,积极参与开源社区,为技术世界贡献力量。
591 3
|
Unix Windows
Charles工具移动端开发代理和调试
Charles工具移动端开发代理和调试
344 1