NYOJ 586 疯牛 & POJ 2456(二分搜索 + 贪心)

2023-11-05

疯牛

时间限制: 1000 ms  |  内存限制: 65535 KB
难度: 4
描述
农夫 John 建造了一座很长的畜栏,它包括N (2 <= N <= 100,000)个隔间,这些小隔间依次编号为x1,...,xN (0 <= xi <= 1,000,000,000).
但是,John的C (2 <= C <= N)头牛们并不喜欢这种布局,而且几头牛放在一个隔间里,他们就要发生争斗。为了不让牛互相伤害。John决定自己给牛分配隔间,使任意两头牛之间的最小距离尽可能的大,那么,这个最大的最小距离是什么呢?
输入
有多组测试数据,以EOF结束。
第一行:空格分隔的两个整数N和C
第二行——第N+1行:分别指出了xi的位置
输出
每组测试数据输出一个整数,满足题意的最大的最小值,注意换行。
样例输入
5 3
1
2
8
4
9
样例输出
3

开始做这道题时,一直没有弄懂题意。后来问了队友才算搞懂了题意。原题链接:http://poj.org/problem?id=2456

题意要表达的是:把C头牛放到N个带有编号的隔间里,使得任意两头牛所在的隔间编号的最小差值最大。例如样例排完序后变成1 2 4 8 9,那么1位置放一头牛,4位置放一头牛,它们的差值为3;最后一头牛放在8或9位置都可以,和4位置的差值分别为4、5,和1位置的差值分别为7和8,不比3小,所以最大的最小值为3。

分析:这是一个最小值最大化的问题。先对隔间编号从小到大排序,则最大距离不会超过两端的两头牛之间的差值,最小值为0。所以我们可以通过二分枚举最小值来求。假设当前的最小值为x,如果判断出最小差值为x时可以放下C头牛,就先让x变大再判断;如果放不下,说明当前的x太大了,就先让x变小然后再进行判断。直到求出一个最大的x就是最终的答案。

#include<stdio.h>
#include<algorithm>
using namespace std;
const int N = 100005;
int a[N], n, c;

bool judge(int x)
{
    int cnt = 1, tmp = a[0];
    for(int i = 1; i < n; i++)
    {
        if(a[i] - tmp >= x)
        {
            cnt++;
            tmp = a[i];
            if(cnt >= c) //可以放下C头牛
                return true;
        }
    }
    return false;
}

int get_ans() //二分搜索最小值
{
    int l = 0, r = a[n-1] - a[0];
    while(l <= r)
    {
        int mid = (l + r) / 2;
        if(judge(mid))
            l = mid + 1;
        else
            r = mid - 1;
    }
    return l - 1;
}

int main()
{
    while(~scanf("%d%d",&n,&c))
    {
        for(int i = 0; i < n; i++)
            scanf("%d",&a[i]);
        sort(a, a+n);
        printf("%d\n",get_ans());
    }
    return 0;
}


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

NYOJ 586 疯牛 & POJ 2456(二分搜索 + 贪心) 的相关文章

  • 2023华为OD机试真题【最短木板长度/贪心算法】

    题目描述 小明有 n 块木板 第 i 1 i n 块木板长度为 ai 小明买了一块长度为 m 的木料 这块木料可以切割成任意块 拼接到已有的木板上 用来加长木板 小明想让最短的木板尽量长 请问小明加长木板后 最短木板的长度可以为多少 输入描
  • 贪心——字典序最小问题

    https vjudge net problem POJ 3617 题目简单理解就是 给定长度为N的字符串为S 要构造一个长度为N的字符串T 起初 T 是一个空串 随后反复进行下列任意操作 从S的头部删除一个字符串 加到T的尾部 从S的尾部
  • 和为 K 的最少斐波那契数字数目(贪心)

    题目描述 给你数字 k 请你返回和为 k 的斐波那契数字的最少数目 其中 每个斐波那契数字都可以被使用多次 斐波那契数字定义为 F1 1 F2 1 Fn Fn 1 Fn 2 其中 n gt 2 数据保证对于给定的 k 一定能找到可行解 示例
  • 货仓选址(贪心)

    我之前在多篇博客中提到货仓选址 却发现从未仔细介绍过货舱选址 今天就来好好说一下货舱选址这个问题 就以这个图来说 我们假设Ap 1 gt x gt Ap 那么距离之和也就是 x A1 x A2 x Ap A p 1 x A p 2 x An
  • 2022-02-22每日刷题打卡

    2022 02 22每日刷题打卡 一本通 动态规划 1268 例9 12 完全背包问题 题目描述 设有n种物品 每种物品有一个重量及一个价值 但每种物品的数量是无限的 同时有一个背包 最大载重量为M 今从n种物品中选取若干件 同一种物品可以
  • 贪心算法-背包问题C++

    1 问题 给定n种物品和一个背包 物品i的重量是Wi 其价值为Vi 背包的容量为C 应如何选择装入背包的物品 使得装入背包中物品的总价值最大 2 算法解析 此算法的贪心策略在于Sort排序函数 背包问题与0 1背包问题不同在于背包问题可以将
  • week4作业题_A-DDL的恐惧

    A DDL的恐惧 题目描述 ZJM 有 n 个作业 每个作业都有自己的 DDL 如果 ZJM 没有在 DDL 前做完这个作业 那么老师会扣掉这个作业的全部平时分 所以 ZJM 想知道如何安排做作业的顺序 才能尽可能少扣一点分 请你帮帮他吧
  • 汽车加油问题【贪心算法】

    1 原版 Problem Description 一辆汽车加满油后可行驶n公里 旅途中有若干个加油站 设计一个有效算法 指出应在哪些加油站停靠加油 使沿途加油次数最少 并证明算法能产生一个最优解 对于给定的n和k个加油站位置 计算最少加油次
  • 1827. 最少操作使数组递增 ----- 贪心算法

    给你一个整数数组 nums 下标从 0 开始 每一次操作中 你可以选择数组中一个元素 并将它增加 1 比方说 如果 nums 1 2 3 你可以选择增加 nums 1 得到 nums 1 3 3 请你返回使 nums 严格递增 的 最少 操
  • 面试经典150题(1)

    文章目录 前言 除自身以外数组的乘积 要求 思路 代码 跳跃游戏 要求 题解 代码 跳跃游戏 要求 题解 代码 前言 今天开始我将陆续为大家更新面试经典150题中较难理解的题目 今天我为大家分享的是 除自身以外数组的乘积 跳跃游戏 和 跳跃
  • 牛客题目——最长无重复子数组、分糖果问题、旋转数组

    文章目录 题目1 最长无重复子数组 解题思路 代码实现 题目2 分糖果问题 解题思路 代码实现 题目3 旋转数组 解题思路 代码实现 题目1 最长无重复子数组 给定一个长度为n的数组arr 返回arr的最长无重复元素子数组的长度 无重复指的
  • ACM--田忌赛马--贪心--HDOJ 1052--Tian Ji -- The Horse Racing

    HDOJ题目地址 传送门 Tian Ji The Horse Racing Time Limit 2000 1000 MS Java Others Memory Limit 65536 32768 K Java Others Total S
  • day32 贪心

    122 买卖股票的最佳时机II 每天都有着卖出和不卖出两种状态 dp解决 55 跳跃游戏 贪心找到最大的覆盖范围 每次都看覆盖范围是否超过了总范围 超过即可 45 跳跃游戏II 贪心找到最大的覆盖范围 和 最小步数 package algo
  • 【贪心算法】阿里巴巴与四十大盗——背包问题与0-1背包问题

    前言 关于贪心算法 我在这篇博客中已经做了简单的介绍 初识贪心算法 下面来介绍一下贪心算法中的一个经典的问题 背包问题 一 问题描述 一天 阿里巴巴赶着一头毛驴上山砍柴 无意间在远处发现了一群盗贼 他们把偷窃强盗来的宝物全部藏在一个山洞里
  • 2020算法设计与分析 官方考前模拟卷 参考答案

    算法设计与分析 样例试题 算法设计与分析总结笔记 注 此试题仅供了解题型 和期末考试试题没有任何直接关系 FBI Warning 这套题难度较大 千万不要坏了心态 xj大佬说要是考试那么难他直播粪坑蝶泳 Power By 王宏志教授 5 分
  • 蓝桥杯备赛:贪心

    例题1 最少砝码 问题描述 你有一架天平 现在你要设计一套砝码 使得利用这些砝码可以称出任意 小于等于 NN 的正整数重量 那么这套砝码最少需要包含多少个砝码 注意砝码可以放在天平两边 输入格式 输入包含一个正整数 N 输出格式 输出一个整
  • Min Difference 二分优化

    题目链接 暴力的时间复杂度是O n 2 n 2 n2 只能在查询的时候优化一下 可以手写一个左闭右开的二分 也可以使用库函数 l
  • P1719 Let‘s play a game!

    include
  • [POI2007]砝码Odw

    看这数据范围就不太可DP的样子 考虑贪心 首先注意到题目里有对于任意两个砝码其中一个是另一个质量整数倍的条件 所以砝码质量的种类不超过log INF 考虑按质量从小到大把砝码往容器里放 这样的话所有的砝码和容器的质量都可以除以当前砝码质量然
  • 雪糕的最大数量 排序+贪心

    雪糕的最大数量 雪糕的最大数量 题目描述 样例 数据范围 思路 代码 题目描述 夏日炎炎 小男孩 Tony 想买一些雪糕消消暑 商店中新到 n 支雪糕 用长度为 n 的数组 costs 表示雪糕的定价 其中 costs i 表示第 i 支雪

随机推荐

  • 什么是Linux系统

    一 什么是Linux系统 系统简介 Linux 全称GNU Linux 是一套免费使用和自由传播的类Unix操作系统 是一个基于POSIX的多用户 多任务 支持多线程和多CPU的操作系统 伴随着互联网的发展 Linux得到了来自全世界软件爱
  • 在服务器上搭建网站

    我们购买云服务器后 进入服务器windows界面 会有几个个重要的系统软件 其中有FileZillaServerInterface 和 Internet信息服务 ISS 管理器 FileZillaServerInterface 是用来与FT
  • Orangepi Zero2——系统启动及wiringPi外设SDK安装

    文章目录 平台介绍 刷机和系统启动 工具 登录 串口登录 修改登录密码 网络配置 串口登录下修改内核日志输出级别 SSH登录开发板 基于官方外设开发 wiringPi外设SDK安装 平台介绍 配置图 背面图 引脚功能图 特性 CPU 全志H
  • Matlab中的傅里叶级数展开函数

    今天在用Matlab 2012b 计算的时候发现其中的函数库没有直接提供傅里叶级数展开的函数 就自己搞了一个 function A B F fseries f x n a b 用于求解函数的傅里叶级数展开 if nargin 3 a pi
  • .ply模型格式解析与Loader编写

    格式介绍 PLY作为一种多边形模型数据格式 不同于三维引擎中常用的场景图文件格式和脚本文件 每个PLY文件只用于描述一个多边形模型对象Object 该模型对象可以通过诸如顶点 面等数据进行描述 被统称作元素Element PLY的文件结构是
  • Matlab:数模03-灰色预测

    文章目录 关于灰色预测模型 累加生成 GM 1 1 模型 GM 1 1 模型的精度检验 Matlab代码 数据测试 01 数据测试 02 用途 关于灰色预测模型 累加生成 在累加生成的基础上 我们建立了GM 1 1 模型 GM 1 1 模型
  • 极大似然估计和最大后验估计

    https baijiahao baidu com s id 1593811166204755239 wfr spider for pc 机器学习中 一般只得到业务产生的数据集D 机器学习目的是通过数据D了解该项业务的过去 建模 和未来 预
  • C#学习教程之三

    C 类是一种数据结构 它可以封装数据成员 函数成员和其他的类 类是创建对象的模版 C 的一切类型都是类 所有的语句都必须位于类内 不存在任何游离于类外的语句 因此 类是C 语言的核心和基本构成模块 C 类 类是从实际对象中抽象出来的一种完整
  • mybatis整合spring之mapperLocations和typeAliasesPackage(mapper-locations和type-aliases-package)

    Spring整合
  • reactnative textinput禁止弹出键盘_定了!这个考试禁止携带计算器!证券从业考试可以带吗?(附计算器使用汇总)...

    hi 大家好 我是大咖罗 都说考证是赶早不赶晚 考试政策的变化总是来得猝不及防 01 会计中级考试 禁止携带计算器 前不久 财政部紧急发布 关于修订印发 全国会计专业技术资格考试考场规则 等文件的通知 通知中明确 携带准考证和有效居民身份证
  • linux 时间通知链机制,linux内核的通知链机制

    一 为什么需要通知链 linux内核的各个子系统之间往往互相关联 一个子系统产生或者侦测到的事件 其它的子系统往往也很感兴趣 因此linux内核采用了通知链机制实现内核的子系统之间的通信需求 值的注意的是 通知链机制仅用于内核内部的子系统之
  • 三阶魔方自动还原 vc实现

    魔方自动求解程序一般有两种方法 一种是按照人还原魔方的步骤 一步步来 另外一种是使用数学方法 魔方自有一套复杂的数学理论 其中较著名的是两阶段算法 压缩文件中的cube430 exe使用的就是数学方法 程序作者便是two phase算法发明
  • BurpSuite超详细安装教程-功能概述-配置-使用教程---(附下载链接)

    一 介绍 BurpSuite是渗透测试 漏洞挖掘以及Web应用程序测试的最佳工具之一 是一款用于攻击web 应用程序的集成攻击测试平台 可以进行抓包 重放 爆破 包含许多工具 能处理对应的HTTP消息 持久性 认证 代理 日志 警报 二 工
  • 使用Cobra开发自己的命令行工具

    Cobra 项目地址 https github com spf13 cobra 1 新建cobra项目 安装cobra cli工具 go install github com spf13 cobra cli latest 新建项目目录 mk
  • 扫盲-----addEventlistener()方法,事件监听(一)

    一 扫盲事件起因 时间 2018年6月1日周五下午 原本我以为我已经把当前的bug改好 应该没啥问题了 坐等下班公司聚餐 开心 突然 隔壁同组大哥 哎 cp 你看看 你这个首页报了很多错哎 我的第一反应就是 不可能 怎么会有错误呢 我明明都
  • osgEarth的Rex引擎原理分析(七十二)如何从高程影像变成高程网格

    目标 七十一 中的问题143 有两种方法 1 对高程影像进行采样 用采样值来设置高程 通过CPU实现 2 通过着色器来实现 在GPU上进行操作 待继续分析列表 9 earth文件中都有哪些options 九 中问题 10 如何根据earth
  • jQuery甘特图/日程图/横道图/插件

    基于JQ的一款灵活高效 支持自定义拓展的甘特图 日程图插件 支持月 周 小时等显示方式 支持拖动改变时间 展开与收起 添加 删除 刷新 节假日高亮 clicked dblClicked changed事件 调用方式 ganttChart g
  • 【备战csp-j】 csp常考题型详解(1)

    一 计算机基础知识 1 微型计算机的问世是由于 的出现 A 中小规模集成电路 B 晶体管电路 C 超 大规模集成电路 D 电子管电路 答案 C 解析 年代 元件 第一代 1946 1958 电子管 第二代 1959 1964 晶体管 第三代
  • Vue使用three.js的GLTFLoader导入外部模型绘制边界

    一 效果展示 threeJs渲染外部模型视频 二 项目引用 将OrbitControls和GLTFLoader引入到项目中 import as THREE from three 引入three import OrbitControls fr
  • NYOJ 586 疯牛 & POJ 2456(二分搜索 + 贪心)

    疯牛 时间限制 1000 ms 内存限制 65535 KB 难度 4 描述 农夫 John 建造了一座很长的畜栏 它包括N 2 lt N lt 100 000 个隔间 这些小隔间依次编号为x1 xN 0 lt xi lt 1 000 000