C语言之贪心算法疯牛

2023-11-15

 

疯牛

时间限制: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

 

 

 

思路:

题意要表达的是:把C头牛放到N个带有编号的隔间里,使得任意两头牛所在的隔间编号的最小差值最大。

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

代码:

#include<stdio.h>
#include<algorithm>
using namespace std;
int a[100005],n,c;
int judge(int mid)
{
    int i,count=1,t=a[0]; //count是指放了几头牛,从1开始。t用来表示当前的房间号
    for(i=1; i<n; i++)
    {
        if(a[i]-t>=mid)//判断两个房间之间的距离
        {
            count++;
            t=a[i];//修改t的值,即修改当前房间号,例如原来t=1,a[2]=4,若a[2]-t>=mid符合,那么t=4,然后算a[3]或者a[4]与t之间的距离。
            if(count>=c)//可以放下C头牛
                return 1;
        }
    }
    return 0;
}
int binary()//二分搜索符合条件的最小距离的最大值
{
    int low=0,high=a[n-1]-a[0],mid;
    while(low<=high)
    {
        mid=(low+high)/2;//mid即为最小房间号与最大房间号之间的距离
        if(judge(mid))
            low=mid+1;//所求距离>=mid,可以继续增大试探
        else
            high=mid-1;//所求距离<mid,所以必须减小来试探
    }
    return low-1; //由于在之前距离+1,所以此时-1
}
int main()
{
    while(~scanf("%d%d",&n,&c))
    {
        int i;
        for(i=0; i<n; i++)
            scanf("%d",&a[i]);
        sort(a,a+n);
        printf("%d\n",binary());
    }
    return 0;
}

 

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

C语言之贪心算法疯牛 的相关文章

  • 单源最短路径问题c++实现(贪心算法)

    文章目录 1 认真审阅题目 明确题目的已知条件和求解的目标 2 问题建模 3 算法设计 4 编码实现 5 测试数据 6 程序运行结果 1 认真审阅题目 明确题目的已知条件和求解的目标 给定一个有向带权图 G V E 其中每条边的权是一个非负
  • 算法之动态规划理论

    目录 前言 一个模型三个特征理论讲解 1 最优子结构 2 无后效性 3 重复子问题 一个模型三个特征实例剖析 两种动态规划解题思路总结 1 状态转移表法 2 状态转移方程法 四种算法思想比较分析 总结 参考资料 前言 本篇博文主要讲解动态规
  • js算法设计思想之“贪心算法”

    贪心算法是算法设计中一种方法 期盼通过每个阶段的局部最优选择 从而达到全局的最优选择 结果不一定是最优的 leetcode 455 分饼干 解题思路 局部最优 技能满足孩子 还消耗最小 先将 较小的饼干 分给胃口最小的孩子 解题步骤 饼干数
  • 贪心算法初步

    一 什么是贪心算法 贪心算法的定义 贪心算法是指在对问题求解时 总是做出在当前看来是最好的选择 也就是说 不从整体最优上加以考虑 只做出在某种意义上的局部最优解 贪心算法不是对所有问题都能得到整体最优解 关键在于贪心策略的选择 选择的贪心策
  • [开发中遇到的算法] 均分数组

    业务背景 最近我需要写并发rpc的负载均衡 某种意义上的吧 遇到很有意思的问题 需求如下 下游固定死最多一次请求100个 比如要请求101个时要拆两个请求并发rpc 并等待两个请求都返回后拼装成一个结果返回 拆成51个 50个发出请求比拆成
  • 贪心的问题合集(Leetcode题解-Python语言)

    贪心算法 Greedy Algorithm 是一种在每次决策时采用当前状态下最优或最好的策略 从而希望导致结果是最好或最优的算法 455 分发饼干 class Solution def findContentChildren self g
  • 斗罗大陆解算法—魂环的最佳获取法

    前言 作者主页 雪碧有白泡泡 个人网站 雪碧的个人网站 推荐专栏 java一站式服务 前端炫酷代码分享 uniapp 从构建到提升 从0到英雄 vue成神之路 解决算法 一个专栏就够了 架构咱们从0说 数据流通的精妙之道 文章目录 前言 背
  • 2023华为OD机试真题【端口合并/贪心算法】

    题目描述 有 M 1 lt M lt 10 个端口组 每个端口组是长度为N 1 lt N lt 100 的整数数组 如果端口组间存在2个及以上不同端口相同 则认为这2个端口组 互相关联 可以合并 第一行输入端口组个数M 再输入M行 每行逗号
  • js实现---加油站问题(贪心算法)

    加油站问题 贪心算法 基本要素 贪心选择 在对问题求解时 总是做出在当前看来是最好的选择 也就是说 不从整体最优上加以考虑 他所做出的是在某种意义上的局部最优解 最优子结构 当一个问题的最优解包含其子问题的最优解时 称此问题具有最优子结构性
  • 力扣45.跳跃游戏II 动态规划与贪心两种解法

    问题 给定一个长度为 n 的 0 索引整数数组 nums 初始位置为 nums 0 每个元素 nums i 表示从索引 i 向前跳转的最大长度 换句话说 如果你在 nums i 处 你可以跳转到任意 nums i j 处 0 lt j lt
  • 数列分段(贪心入门)

    问题 对于给定的一个长度为 n 的正整数数列 ai 现要将其分成连续的若干段 并且每段和不超过 m 可以等于 m 问最少能将其分成多少段使得满足要求 算法复杂度为O n 思路 对于已给出数列 从前往后扫描一遍 在扫描过程中 不断记录当前最大
  • 【洛谷 P1115】最大子段和 题解(贪心算法)

    最大子段和 题目描述 给出一个长度为 n n n 的序列 a a a 选出其中连续且非空的一段使得这段和最大 输入格式 第一行是一个整数 表示序列的长度 n
  • LeetCode第55题解析

    给定一个非负整数数组 你最初位于数组的第一个位置 数组中的每个元素代表你在该位置可以跳跃的最大长度 判断你是否能够到达最后一个位置 示例 1 输入 2 3 1 1 4 输出 true 解释 我们可以先跳 1 步 从位置 0 到达 位置 1
  • 面试经典150题(1)

    文章目录 前言 除自身以外数组的乘积 要求 思路 代码 跳跃游戏 要求 题解 代码 跳跃游戏 要求 题解 代码 前言 今天开始我将陆续为大家更新面试经典150题中较难理解的题目 今天我为大家分享的是 除自身以外数组的乘积 跳跃游戏 和 跳跃
  • 动态规划:什么是动态规划?

    一 什么是动态规划 动态规划 Dynamic Programming 简称Dp 是一种算法思想 将原 大 问题化解成子问题 再根据子问题的解得出原问题的解 1 1 什么是最优子结构和重复子问题 1 2 什么是状态转移方程 跟最优子结构的关系
  • A*算法 解决(有环图)第k短路径长度(C++)

    算法竞赛 file author jUicE g2R qq 3406291309 彬 bin 必应 一个某双流一大学通信与信息专业大二在读 brief 一直在算法竞赛学习的路上 copyright 2023 9 COPYRIGHT 原创技术
  • 4-2 背包问题(贪心)

    4 2 背包问题 贪心 与0 1背包问题类似 所不同的只是在选择物品i装入背包时 可以选择物品的一部分而不一定要全部 1 i n 用贪心算法解背包问题的基本步骤是 首先计算每种物品单位重量的价值vi wi 然后 依贪心选择策略 将尽可能多的
  • 刷题day65:分割等和子集

    题意描述 给你一个 只包含正整数 的 非空 数组 nums 请你判断是否可以将这个数组分割成两个子集 使得两个子集的元素和相等 思路 使用01背包 背包的体积为sum 2 背包要放入的商品 集合里的元素 重量为 元素的数值 价值也为元素的数
  • 信奥一本通 贪心算法 回顾

    文章目录 写在前面 A 家庭作业 B 智力大冲浪 C 加工生产调度 D 喷水装置3 线段覆盖最少线段 E 活动安排 线段覆盖 覆盖最多段 F 种树 G 数列极差 H 数列分段 I 钓鱼 J 均分纸牌 K 糖果传递 写在前面 之前看到一篇非常
  • P1719 Let‘s play a game!

    include

随机推荐

  • Leetcode 第 43 场双周赛题解(Python)

    Leetcode 第 43 场双周赛题解 周赛日期 2020 01 09 题目1 1716 计算力扣银行的钱 难度 简单 Hercy 想要为购买第一辆车存钱 他 每天 都往力扣银行里存钱 最开始 他在周一的时候存入 1 块钱 从周二到周日
  • 《一个操作系统的实现》读书笔记--第二章--搭建工作环境

    一 熟悉Bochs虚拟机 第一章我们使用虚拟机VMware运行了该最最简单的操作系统 由于VMware虚拟机不具备调试操作系统的功能 因此对于开发操作系统的程序员来说 VMware是不完备的 故本章介绍另一款虚拟机Bochs 下面我们就介绍
  • python 连续比较_python等值和大小比较

    等值 大小比较 在python中 只要两个对象的类型相同 且它们是内置类型 字典除外 那么这两个对象就能进行比较 关键词 内置类型 同类型 所以 两个对象如果类型不同 就没法比较 比如数值类型的数值不能和字符串类型的数值或字母比较 对于py
  • 计算机图形学GAMES101(十五)光线追踪(蒙特卡洛积分与路径追踪)

    本节涉及内容 蒙特卡罗积分 路径追踪 蒙特卡罗积分 蒙特卡罗积分的核心思想还是求一个不规则图形的面积 它的做法是 首先在a和b之间找一个值xi然后求f x 接着以f x 为高 ab为宽求矩形的面积 最后将所有的值求平均 当采样数量xi趋于无
  • C++斩题录

    个人主页 平行线也会相交 欢迎 点赞 收藏 留言 加关注 本文由 平行线也会相交 原创 收录于专栏 手撕算法系列专栏 LeetCode 本专栏旨在提高自己算法能力的同时 记录一下自己的学习过程 希望对大家有所帮助 希望我们一起努力 成长 共
  • 华南技术栈CNN+Bilstm+Attention

    我的目标适用于文本分类 这里有一个 技术栈完全一样但是目标不一样的应该可以参考 现在的情况 2022年7月6日21 16 04已解决 换成了CPU 因为电脑太破旧了 cuda跟不上pytorch官网 已安装 cuda cudnn anaco
  • 兼阅万分享:适合上班族下班时间做的6项兼职小副业

    你的收入还在8000以下 车贷 房贷 孩子学费 兴趣班费用要交 开车油门踩深点 都会心疼油费 每个月的压力都很大 白天要干活 有没有适合晚上下班后做的兼职或者副业 今天推荐6项 可以保存下来 如果真的撑不住了 挑一个干 虽然发不了大财 但改
  • python提高办公效率-【纯干货】提高Python运行效率的小窍门

    Python是一门优秀的语言 它能让你在短时间内通过极少量代码就能完成许多操作 不仅如此 它还轻松支持多任务处理 比如多进程 不喜欢Python的人经常会吐嘈Python运行太慢 但是 事实并非如此 尝试以下六个窍门 来为你的Python应
  • 爬虫日常练习-selenium登录12306

    文章目录 前言 页面分析 代码设计 前言 hello 好兄弟们 经过前面几篇文章后 想必小伙伴们对于简单的网页文本爬取 图片爬取类的内容已经熟练掌握了 今天我们开始练习一个新的内容 selenium 有关这一块的基础知识网上太多了 我们作为
  • 微信小程序如何测试?

    不需要安装 只要在微信里找到这个小程序打开即可使用 由于小程序的便捷 如今越来越多的平台开发方都纷纷推出自身的小程序应用 那我们该如何进行微信小程序测试呢 1 功能测试 功能测试以需求文档和交互视觉文档为准 如果没有这些文档 参考APP的测
  • 卷积神经网络的评价_金工研报:利用卷积神经网络进行多因子选股

    写在前面 下面这篇文章的内容主要来自华泰证券的研究报告 人工智能选股之卷积神经网络 文中首先通过对卷积神经网络 CNN 进行分析 然后通过将因子数据转换为二维图片的形式 并根据CNN原理给出了通过CNN运用于多因子选股的经验和方法 最后通过
  • map中取值转BigDecimal报错 java.lang.Integer cannot be cast to java.math.BigDecimal

    Map
  • Elasticsearch 中文分词&多词搜索&权重

    目录 中文分词器 一 安装中文分词器ik 二 使用中文分词器 多词搜索 权重 中文分词器 一 安装中文分词器ik 源码地址 https github com medcl elasticsearch analysis ik 根据提示 进行安装
  • HLS 流传输库hls::stream

    流传输数据是一种数据传输形式 其中数据样本从第一个样本开始按顺序发送 流传输不需要地址管理 Vivado HLS 提供了 C 模板类 hls stream lt gt 用于对流传输数据结构进行建模 使用 hls stream lt gt 类
  • 前端加密和解密

    Base64加密 加密 Base64 encode Base64 encode 解密 Base64 decode Base64 decode url携带参数加密 加密 encodeURLComponent encodeURLComponen
  • 【Unity】一个简单的无限列表

    1 根据InfiniteElem 的高度和总个数 计算出Content的长度 2 根据Content所在的滚动位置 计算出当前哪些InfiniteElem显示在列表中 3 循环是生成的几个InfiniteElem显示列表内容 实现无限列表
  • LeetCode-1827. 最少操作使数组递增【贪心,数组】

    LeetCode 1827 最少操作使数组递增 贪心 数组 题目描述 解题思路一 简单暴力 解题思路二 优化1 ans是操作数 mx是当前最大元素 mx无论如何会依次递增 解题思路三 优化2 遇到小的数就pre 1 否则变为num 题目描述
  • C# 文件上传

    获取POST 请求发送的文件 并保存到服务器 HttpPostedFile file System Web HttpContext Current Request Files file 获取上载文件名称 string FileName fi
  • SoapUI、Jmeter、Postman三种接口测试工具的比较分析

    前段时间忙于接口测试 也看了几款接口测试工具 简单从几个角度做了个比较 拿出来与诸位分享一下 本文从多个方面对接口测试的三款常用工具进行比较分析 以便于在特定的情况下选择最合适的工具 或者使用自己编写的工具 不同工具定位不同 我们只是主要从
  • C语言之贪心算法疯牛

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