E - Dist Max 2(二分)

2023-10-27

E - Dist Max 2icon-default.png?t=M666https://vjudge.csgrandeur.cn/problem/AtCoder-abc215_f

AC代码:

 

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

typedef long long ll;

const int N=2e5+10,inf=0x3f3f3f3f;

struct node
{
    int x,y;
}a[N];

int n;

bool cmp(node a,node b)
{
    if (a.x!=b.x)return a.x<b.x;
    else return a.y<b.y;
}
bool check(int mid)
{
    int l=1;
    int mi=inf,ma=-1;
    for (int i=1;i<=n;i++)//遍历所有点
    {
        
        while (l<=n&&a[i].x-a[l].x>=mid)//遍历所有点,找到满足while条件的点,并找到最大值最小值
        {
            mi=min(mi,a[l].y),ma=max(ma,a[l].y);//找最大最小的y值,目的是这样与a[i].y的差值才能尽可能大,才最有可能找到>=mid的点
            l++;
        }//一个点的x,y都大于mid,min(x,y)才肯定>=mid
        if (a[i].y-mi>=mid||ma-a[i].y>=mid)//只要找到存在距离>=mid的点,返回true,并缩小范围
            return true;
    }
    return false;
}

signed main()
{
    scanf("%d",&n);
    for (int i=1;i<=n;i++)
        cin>>a[i].x>>a[i].y;
    sort(a+1,a+n+1,cmp);//排序的目的,我认为是二分肯定需要排序,并且更方便找最大和最小的y值
    int l=0,r=1e9;
    while (l<r)
    {
        int mid=(l+r+1)>>1;//假设答案为mid,二分验证缩小范围
        if (check(mid))l=mid;
        else r=mid-1;
    }
    printf("%d\n",l);
    return 0;
}

超时:

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

typedef long long ll;

const int N=2e5+10,inf=0x3f3f3f3f;

struct node
{
    int x,y;
}a[N];

int n;

bool cmp(node a,node b)
{
    if (a.x!=b.x)return a.x<b.x;
    else return a.y<b.y;
}
bool check(int mid)
{
    int l=1;
    int mi=inf,ma=-1;
    for (int i=1;i<=n;i++)
    {
        l=1;//每次循环l都要从1开始找
        while (l<=n&&a[i].x-a[l].x>=mid)//超时了
        {

            if (a[i].y-a[l].y>=mid||a[l].y-a[i].y>=mid)
               return true;
            l++;
        }
    }
    return false;
}

signed main()
{
    scanf("%d",&n);
    for (int i=1;i<=n;i++)
        cin>>a[i].x>>a[i].y;
    sort(a+1,a+n+1,cmp);
    int l=0,r=1e9;
    while (l<r)
    {
        int mid=(l+r+1)>>1;
        if (check(mid))l=mid;
        else r=mid-1;
    }
    printf("%d\n",l);
    return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

E - Dist Max 2(二分) 的相关文章

随机推荐

  • 基于 session 和基于 token 的用户认证方式到底该如何选择

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 现在貌似大多数网站用户认证都是基于 session 的 即在服务端生成用户相关的 session 数据 而发给客户端 sesssion id 存放到 cookie 中 这样
  • beyond compare使用

    灰色 在自己定义的比较标准下比较 完全相同 红色 在自己定义的比较标准下比较 不相同 蓝色 在自己定义的比较标准下 蓝色的文件为多出来的文件 2012 10 15
  • 微信小程序quickstartFunctions中云函数的应用

    1 在quickstartFunctions文件中新建文件夹和文件 2 index js 文件书写 const cloud require wx server sdk cloud init env cloud DYNAMIC CURRENT
  • dbeaver导出建表语句_常用SQL语句(时常修改)

    咱们在开发中有很多的sql 是不好写的 写完了 还总容易出问题 所以从现在开始总结 这些SQL语句 2019 01 09更新 这个问题是因为做设计的时候忘了数据的唯一的问题 导致数据出现重复 查询的时候出现了查询的selectOne变成se
  • Sencha的Eclipse插件提示和技巧

    原文 http www sencha com blog sencha eclipse plugin tips tricks Sencha的Eclipse插件是一个完整的用于流行的Eclipse IDE的代码辅助和验证插件 有了该插件 就可以
  • lol数据英雄联盟接口LOL接口电竞api开发比分网分享@

    英雄联盟数据LOL接口电竞api开发比分网分享 TOC 数据来自marz数据alan marzesport com 各大赛区的lol数据都有 1 获取赛事 接口 host1 api series 9870 示例 赛事相关接口 begin a
  • Vmware虚拟机网络模式原理及配置详解

    概述 VMware为我们提供了三种网络工作模式 它们分别是 bridged 桥接模式 host only 仅主机模式 nat 网络地址转换模式 打开VMware Workstation 我们可以在选项栏的 编辑 下的 虚拟网络编辑器 中看到
  • 915. 分割数组-动态规划算法

    915 分割数组 动态规划算法 给定一个数组 nums 将其划分为两个连续子数组 left 和 right 使得 left 中的每个元素都小于或等于 right 中的每个元素 left 和 right 都是非空的 left 的长度要尽可能小
  • 跨境做独立站,如何低成本引流?你的流量密码在这

    大家都知道 海外的消费习惯与国内不同 独立站一向是海外消费者的最喜欢的购物方式之一 这也吸引了许多跨境商家开设独立站 独立站不同于其他的第三方平台 其他平台可以靠平台自身流量来获得转化 而独立站本身没有流量 需要卖家从各大社媒平台进行自主引
  • 史上最牛独立开发者:花20美元狂赚100万美元

    Joe Kaufman 是一个名副其实的独立开发者 只有一个同伴 他一人处理所有的设计 美术 动画 尽管如此 他的游戏还是获得了巨大成功 Grisly Manor 恐怖庄园的秘密 的下载量已达400万 Lost City 失落之城 的也已经
  • 如何统计Visual Studio Code项目的代码行数

    背景 年底到了 公司一年一度做述职报告的时间又到了 每到此时小伙伴们都想方设法的去做一些代码层面的汇总 在此交给大家个小妙招 走过路过不要错过哈 解决方案 使用Visual Studio Code自带的在文件中查找功能中的正则表达式实现代码
  • Android新手入门 FAQ

    Q 什么是Android A Android一词的本义指 机器人 同时也是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称 该平台由操作系统 中间件 用户界面和应用软件组成 号称是首个为移动终端打造的真正开
  • Openstack Qos

    Openstack network qos 1 配置QOS 此处网络为provider网络 无self server网络 无L3 只有控制节点和计算节点 控制节点上 vim etc neutron neutron conf service
  • 立体匹配 -- PSM-Net 网络模型代码剖析

    只熟悉流程跑通代码不重要 重要的是理解网络的思想 GC Net提出了3D CNN编解码的形式做 cost volum 后处理的过程 PSM Net 加入图像金字塔的模块结合3D CNN 输出图像视差图 一 特征提取模块 作者用 3层 33的
  • 2023华为OD机试真题【组装数组】

    题目描述 给你一个整数M和数组N N中的元素为连续整数 要求根据N中的元素组装成新的数组R 组装规则 1 R中元素总和加起来等于M 2 R中的元素可以从N中重复选取 3 R中的元素最多只能有1个不在N中 且比N中的数字都要小 不能为负数 输
  • SpringBoot实现原理

    一 什么是SpringBoot SpringBoot是一个快速开发框架 快速的将一些常用的第三方依赖整合 原理 通过Maven子父工程的方式 简化XML配置 全部采用注解形式 内置Http服务器 Jetty和Tomcat 最终以java应用
  • 二叉树实现按层 s型打印

    题目阐释 s型打印 重要的是将binary tree 逐层遍历 获取每层的node 思路 将树的遍历转化为 压栈出栈 每次将列表内的node全部出栈 获取子元素 然后全部再入栈 如此反复迭代 应用 当树有层次信息时候 可以如此操作 代码如下
  • 【Spring源码】Spring流程

    1 初始化AnnotationBeanDefinitionReader 2 初始化ClassPathBeanDefinitionScanner 3 执行register 注册配置类 4 执行refresh 先初始化比如BeanFactory
  • 在校园网中配置路由器的lan口上网

    使用的是mercury路由器 在配置路由器的时候可以先按重置按钮 几秒之后路由器就重新启动了 在连接的时候可以首先进行登陆 melogin cn 或者 192 168 1 1 不同的路由器可能会有所不同 设置好登陆密码和无线密码之后可以重新
  • E - Dist Max 2(二分)

    E Dist Max 2https vjudge csgrandeur cn problem AtCoder abc215 f AC代码 include