题面:

题目大意:

为了准备即将到来的马蹄球锦标赛,农夫约翰正在训练他的N头奶牛。奶牛都站在谷仓的一边,排成一条很长的队伍,奶牛站在单位离开谷仓(1< xi< 1000)。每头牛都站在不同的位置。在训练开始时,农夫约翰会把几个球传给不同的奶牛。当奶牛收到一个球时,不是来自农夫约翰,就是来自另一头牛。
她会把球传给离她最近的奶牛(如果有几头奶牛离她同样的距离,她会把球传给她左边的奶牛)。为了让所有的奶牛都得到至少一点传球的练习,农场主约翰想要确保每头奶牛都至少拿过一次球。假设他将球交给一组合适的初始奶牛,帮助他计算出他最初需要分发的球的最小数量,以确保这一点能够实现。

数据大小:

N(1<=N<=100)

思路:

强大的队友用的是dp来求,可惜我不会。但是题目数据很小,而我又很会乱搞 ,于是我模拟出了一种可行的方法。首先,因为奶牛们在相同距离的时候会把球传给左边的奶牛,那么很贪心的想法就是先把球给最右边的奶牛,然后不断地传传传,直到不能传给下一位奶牛,就停止,再给一个新的球给下一位奶牛直到最左边的奶牛踢到了球。
但是。。。事情还没有完,因为当出现:
1 1000 998 995 990…这样的从左边贪心更优的情况时,我们就gg了。
所以我们要从右到左,左到右贪两遍。(不是正解,仅供参考)
ac丑代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include <vector>
#include<algorithm>
using namespace std;
typedef long long ll;
#define MAX 100005
#define INF 10000000
int vis[105];
int main()
{int n;int a[105];scanf("%d",&n);for(int i = 0;i<n;i++)scanf("%d",&a[i]);sort(a,a+n);int sum = 1;//传给最后一位vis[n-1] = 1;for(int i = n-2;i > 0;i--){if((a[i+1]-a[i]) >= (a[i]-a[i-1]))continue;//可以传球else{sum++;vis[i-1] = 1;//标记给球的奶牛编号}}for(int i = 0;i<n;i++)//从左到右贪心{//第i个有球,往后贪心,遇到有球的奶牛就把球收回去,因为从第i个可以传到现在的位置if(vis[i]){for(int j = i;j<n-1;j++){if(j == 0){if(vis[1])sum--;vis[1] = 0;continue;}if(a[j]-a[j-1] > a[j+1]-a[j]){if(vis[j+1]){sum--;vis[j+1] = 0;}}else break;}}}printf("%d",sum);return 0;
}

Hoofball(B题)相关推荐

  1. 牛年前的一小结——打响本命年的第一枪,继续刷题!

    经过一段时间的小尝试,摸索出了一点点头儿吧. 总结一下子. 关于面试的java,像我这个经验层次(1-2year普通厂)的都不会太难.最多超不出力扣中等难度. 多练习链表.树.指针类的比较基础的题目: ...

  2. 快起床刷题去,别人把你offer拿走啦

    好久没有上力扣刷题咯,又到了关键的时刻,却忘得零零散散,囧~ 话说,刷题.学算法.常用,这些技能才能长在身上! 上一道刚刚遇到的正菜~ 题:给定一个整数数组 nums 和一个目标值 k,请实现一个方法 ...

  3. LeetCode简单题之删除字符使字符串变好

    题目 一个字符串如果没有 三个连续 相同字符,那么它就是一个 好字符串 . 给你一个字符串 s ,请你从 s 删除 最少 的字符,使它变成一个 好字符串 . 请你返回删除后的字符串.题目数据保证答案总 ...

  4. LeetCode中等题之区域和检索 - 数组可修改

    题目 给你一个数组 nums ,请你完成两类查询. 其中一类查询要求 更新 数组 nums 下标对应的值 另一类查询要求返回数组 nums 中索引 left 和索引 right 之间( 包含 )的nu ...

  5. LeetCode简单题之基于排列构建数组

    题目 给你一个 从 0 开始的排列 nums(下标也从 0 开始).请你构建一个 同样长度 的数组 ans ,其中,对于每个 i(0 <= i < nums.length),都满足 ans ...

  6. LeetCode简单题之Excel 表中某个范围内的单元格

    题目 Excel 表中的一个单元格 (r, c) 会以字符串 "" 的形式进行表示,其中: 即单元格的列号 c .用英文字母表中的 字母 标识. 例如,第 1 列用 'A' 表示, ...

  7. LeetCode中等题之简易银行系统

    题目 你的任务是为一个很受欢迎的银行设计一款程序,以自动化执行所有传入的交易(转账,存款和取款).银行共有 n 个账户,编号从 1 到 n .每个账号的初始余额存储在一个下标从 0 开始的整数数组 b ...

  8. LeetCode简单题之有多少小于当前数字的数字

    题目 给你一个数组 nums,对于其中每个元素 nums[i],请你统计数组中比它小的所有数字的数目. 换而言之,对于每个 nums[i] 你必须计算出有效的 j 的数量,其中 j 满足 j != i ...

  9. LeetCode中等题之在排序数组中查找元素的第一个和最后一个位置

    题目 给定一个按照升序排列的整数数组 nums,和一个目标值 target.找出给定目标值在数组中的开始位置和结束位置. 如果数组中不存在目标值 target,返回 [-1, -1]. 进阶: 你可以 ...

最新文章

  1. UVM基础之------uvm_port_base
  2. java printwrite_Java PrintWriter write(int)用法及代码示例
  3. windows10在线升级失败后的一些补救措施
  4. CHIP ID was not passed on from the tile; contact your system administrator
  5. 表达式求值及转换算法
  6. C语言的关键字和详细介绍
  7. 手把手教你如何免费且光荣地使用专业版IntelliJ IDEA
  8. 超级简单的jQuery纯手写五星评分效果
  9. 为什么我们公司强制弃坑Fastjson了?主推...
  10. Python基础教程,Python入门教程(非常详细)
  11. linux firefox 解雇ie,Fire IE
  12. kolla快速集成openstack-ocata和opencontrail-4.0.1.0单节点
  13. 记忆测试系统c语言,单词记忆测试器程序设计.doc
  14. 【秘密】我经历过的币圈天使融资,了解一下
  15. [iOS] Windows 使用IPSW文件升级iOS 13 beta
  16. 1000+常用Python库
  17. 复杂问题的知识问答技术介绍
  18. 也许你我都在等待~~~~~~~~~~~~~~~~
  19. 11.Django基础九之中间件
  20. 假相当位温MATLAB绘图,关于假相当位温的精确计算

热门文章

  1. lol那个服务器有无限火力,全新游戏模式-无限火力上线
  2. ckplayer 一个不错的网页视频播放器
  3. 计算机专业学英语建模,英语翻译段子如下:三维建模技术主要的方法就是利用计算机三维制作软件进行三维基础建模,这主要包括多边形建模方式建模、NUR...
  4. 聘用协议_聘用合同谈判
  5. 容斥原理和概率与数学期望
  6. 6v电源控制12v继电器
  7. UKEY通信CCID
  8. 前苏联切尔诺贝利辐射禁区拍摄到野生水獭吞食鱼
  9. ASURO机器人电机干扰造成MCU误报电量低(LVLV)问题
  10. LaTex---在图片或表格上方、下方添加字体