题目描述:

给定n条鱼,每条鱼具有其自身体重,以及被捕食者吃掉后,捕食者会增加的体重

假如你是一条鱼,你可以吃掉任何体重小于等于你的鱼类。现在需要吃掉所有n条鱼,请问你需要具备的最小体重x是多少。

题目解析:

题目的hint指出二分答案,我们的思路便很明确:

x不会超过最大鱼的体重,因为最大的鱼直接可以吃掉n条鱼,同时,x也不会小于最小鱼的体重,如果这样的话一条鱼也吃不掉。这样,我们得到了x的范围,在其中进行二分查找即可。

由于鱼具有两种性质,并且需要对体重排序,定义结构如下:

struct fish{int w;int v;bool operator < (const fish &b) const{return w<b.w;}
}a[10005];

为了判断体重x能否吃掉所有鱼,定义eat函数

int eat(int x)
{int i;for(i=1;i<=n;i++) if(a[i].w>x) break;int weight=sum[i-1]+x; for(int j=i;j<=n;j++){if(weight>=a[j].w) weight+=a[j].v;else return 0;}return 1;
}

其中sum数组预处理了前i条鱼提供的增重总和。

完整代码如下:

#include<stdio.h>
#include<climits>
#include<iostream>
#include<algorithm>
using namespace std;
struct fish{int w;int v;bool operator < (const fish &b) const{return w<b.w;}
}a[10005];
int b[10005];
int sum[10005];
int n;
int eat(int x)
{int i;for(i=1;i<=n;i++) if(a[i].w>x) break;int weight=sum[i-1]+x; for(int j=i;j<=n;j++){if(weight>=a[j].w) weight+=a[j].v;else return 0;}return 1;
}
int main()
{cin>>n;for(int i=1;i<=n;i++) cin>>a[i].w>>a[i].v;sort(a+1,a+1+n);sum[1]=a[1].v;for(int i=2;i<=n;i++) sum[i]=sum[i-1]+a[i].v;int l=a[1].w,r=a[n].w;int mid;//   printf("7");while(l<r){mid=(l+r)/2;if(eat(mid)) r=mid;else l=mid+1; }cout<<mid;}

T1-H 大鱼吃小鱼相关推荐

  1. 多个矩形,求覆盖面积,周长,及交点

    问题:给出若干个矩形,(给的是矩形左上角和右下角坐标),求最后所得图形的面积/周长: 三个矩形如左图所示,而若要计算面积,看右图,用3个矩形各自的面积之和减去重复部分(红色和蓝色)的面积 人算很简单, ...

  2. 016 | 漫谈区块链共识机制

    原创文章,转载请注明:转载自Keegan小钢 并标明原文链接:http://keeganlee.me/post/blockchain/20180425 微信订阅号:keeganlee_me 写于201 ...

  3. shell版俄罗斯方块

    #!/bin/bash # Tetris Game # 10.21.2003 xhchen #颜色定义 cRed=1 cGreen=2 cYellow=3 cBlue=4 cFuchsia=5 cCy ...

  4. shell脚本俄罗斯方块游戏

    亲自测试了一个大牛写的shell脚本,感兴趣可以看看,效果如下: 代码如下: 1 #!/bin/bash 2 3 # Tetris Game 4 # 10.21.2003 xhchen<[ema ...

  5. NLP重大突破?一文读懂XLNet“屠榜”背后的原理

    作者 | 李理 原文链接:https://fancyerii.github.io/2019/06/30/xlnet-theory/ 本文介绍XLNet的基本原理,读者阅读前需要了解BERT等相关模型, ...

  6. 牛客网平台常州大学新生寒假训练会试

    A-添加逗号 链接:https://www.nowcoder.net/acm/contest/78/A 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其 ...

  7. 【邓侃】哈佛大学机器翻译开源项目 OpenNMT的工作原理

    一. 哈佛大学机器翻译开源项目 OpenNMT 2016年12月20日,哈佛大学自然语言处理研究组,宣布开源了他们研发的机器翻译系统 OpenNMT [1],并声称该系统的质量已经达到商用水准. 在 ...

  8. c语言读h5文件,我利用C语言实现SHA-256算法,需要从一个txt文件中读出数据并把...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 并把得到的密文写入另一个txt文件张该怎么改代码啊? #include #include extern char* StrSHA256(const cha ...

  9. acm算法模板(2)

    数学问题: 1.精度计算--大数阶乘 2.精度计算--乘法(大数乘小数) 3.精度计算--乘法(大数乘大数) 4.精度计算--加法 5.精度计算--减法 6.任意进制转换 7.最大公约数.最小公倍数 ...

  10. C语言实现变步长求积分算法

    链接:https://blog.csdn.net/chen_dsir/article/details/71257631  博主详细介绍了复合梯形公式, 链接:https://wenku.baidu.c ...

最新文章

  1. 刷了半年LeetCode,总共500题,拿到了 Google 的 special offer,记下笔记,感谢这些很有用的公众号...
  2. (已解决)linux如何删除-开头的文件或者目录
  3. 全球智慧医疗产业发展现状
  4. scheduledexecutorservice 的使用_使用J.U.C实现定时任务
  5. 3分钟学会python_3分钟学会一个Python小技巧
  6. vue中手机号,邮箱正则验证以及60s发送验证码
  7. java对象流读取完毕_从Java 8流中获取具有最大频率的对象
  8. oracle 表关联索引优化,Oracle执行计划调优-超级大表关联超级小表的性能调优
  9. phpShort v3.2 – PHP短网址平台源码
  10. POJ 2777 ZOJ 1610 HDU 1698 --线段树--区间更新
  11. php如何从获取数据,如何从​​获取值并保存到php的数据库
  12. 动态设置div的高度_DIV块和文字水平垂直居中,点击弹出文字提示
  13. 语音数据集下载地址汇总| 免费的汉语说话人识别语料库 | Common Voice 数据集 | 下载总结
  14. 教务系统自动评教_「四川大学教务处本科登陆系统」四川大学本科教务系统 - 一键评教 - seo实验室...
  15. 做在线交易你必须知道的关于支付的知识
  16. tomcat7 性能优化
  17. 【马红“名师+”研修共同体成员风采】
  18. 冯成毅:各类交易者的深度心理剖析
  19. 2018年的第一篇文章(福利篇)
  20. exchange外网访问和证书配置

热门文章

  1. 还在花钱打印身份证、证件照?打开手机3秒就能扫描打印,秒学
  2. kaldi lattice
  3. 视觉SLAM中的数学——解方程AX=b与矩阵分解:奇异值分解(SVD分解) 特征值分解 QR分解 三角分解 LLT分解
  4. Windows手动清理C盘
  5. Python的中文识别问题解决办法
  6. IT知识百科:什么是下一代防火墙和IPS?
  7. 2021年中国智能家电行业产业发展环境(PEST)及前景分析[图]
  8. 优雅代码的秘密,只因为我掌握了Java Stream 流操作
  9. 让eclipse的主题变成黑色
  10. 计算机路由表更新命令,计算机cmd命令之route,查看路由表,或配置一个更有效的路由...