【二分】Haybale Feast
题目来源:牛客
题目大意:
N(N< 1 0 5 10^5 105)种饲料,每种饲料有flavor和spiciness两个参数(各自用一个 1 0 9 10^9 109内的整数表示)
N种饲料编号1~N,从中选出连续的一组饲料(比如[3,7]号饲料),这组饲料总的spiciness值为该组内各个饲料spiciness值的最大值,总的flavor值为该组内各个饲料flavor值的和
现求从N种饲料中取出的连续的一组饲料,在满足flavor值大于M(M< 1 0 18 10^{18} 1018)的前提下,spiciness的最小值为多少
分析:
二分,然后 O ( n ) O(n) O(n)判断解是否满足要求
二分的思路来源:答案的范围为 [ 1 , 1 0 9 ] [1,10^9] [1,109],且若有两个满足要求的解,值小的一定比值大的更优
如何判断解是否满足要求?
遍历一遍数组,利用贪心的思想,若一种饲料spiciness值小于等于x,则我们就将它的flavor值加上(因为目的是得到sum值大于M的区间)
代码:
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <cmath>
using namespace std;long long N,M;
long long a[100005],b[100005];bool check(long long x){long long sum=0;for(int i=1;i<=(int)N;i++){if(b[i]>x){sum=0;continue;}sum+=a[i];if(sum>=M) return true;}return false;
}int main(){scanf("%lld%lld",&N,&M);for(int i=1;i<=(int)N;i++)scanf("%lld%lld",&a[i],&b[i]);long long l=1,r=(long long )1e9+1;long long ans;while(l<=r){long long mid=(r-l)/2+l;if(check(mid)) ans=mid,r=mid-1;else l=mid+1;}printf("%lld\n",ans);return 0;
}
【二分】Haybale Feast相关推荐
- 牛客 24086 Haybale Feast
牛客 24086 Haybale Feast 题目链接 题目描述 Farmer John is preparing a delicious meal for his cows! In his barn ...
- [USACO17DEC]Haybale Feast G
题目链接:[USACO17DEC]Haybale Feast G 很显然s具有二分性,然后check每一个字段的和即可.因为s为正,所以全部加起来肯定是最优的. 不知道为什么没人写二分. AC代码: ...
- luogu P4085 [USACO17DEC]Haybale Feast(尺取法 + 线段树)
C.luogu P4085 [USACO17DEC]Haybale Feast 题目链接 直接开一个线段树维护即可. 注意开ll 线段树维护最大值.注意下标别写错了,比如tr[r] #include& ...
- [bzoj5142][Usaco2017 Dec]Haybale Feast
Orz w_yqts 在某王姓dalao的指导下暂时卡到rank1--Orz 二分答案 #include <cstdio> #define ll long long #define N 1 ...
- Luogu4085 [USACO17DEC]Haybale Feast (线段树,单调队列)
\(10^18\)是要long long的. \(nlogn\)单调队列上维护\(logn\)线段树. #include <iostream> #include <cstdio> ...
- 【常用技巧精选】尺取法
整理的算法模板合集: ACM模板 目录 1.反向扫描 1 找指定和的整数对 A.UVA1121 Subsequence B.POJ 3320 Jessica's Reading Problem C.l ...
- 线段树 + 二分答案:Haybale Guessing G
参考文献:题解 P2898 [[USACO08JAN]haybale猜测Haybale Guessing] - レムの小屋 - 洛谷博客 题目链接:[USACO08JAN]Haybale Guessi ...
- 算法图解/二分查找/简单查找/选择排序/递归算法/快速排序算法/
大 O 表示法 大 O 表示法在讨论运行时间时,log 指的都是 log2 大 O 表示法指出了算法有多快,让你能够比较操作数,它指出了算法运行时间的增速,而并非以秒为单位的速度. 大 O 表示法指出 ...
- 分治算法的设计思想(二分检索、二分归并排序)
分治策略思想: 将原问题划分或者归结为规模较小的子问题. 递归或迭代求解每一个问题. 将子问题的解综合得到原问题的解. 性质: 子问题与原问题具有相同的性质. 子问题的求解彼此独立. 划分时子问题的规 ...
最新文章
- MapXtreme 操作地图时出现调用目标发生异常的解决方法--地图状态保存
- springboot 单元测试
- matlab选择结构
- CozyRSS开发记录8-解析一份RSS
- linux-2.6.32在mini2440开发板上移植(16)之LED 驱动程序移植
- linux c mysql教程_Linux c访问mysql 编写入门
- c语言指针算法分析怎么写,什么叫指针算法啊??
- 十年 | 在Java开发做了10年后,才学会此绝招,用于颠覆Java应用
- 嘉年华回顾丨PingCAP CEO 刘奇,带你探寻TiDB...
- 【算法】迪杰斯特拉算法 最短路径算法
- 2018年python工作好找吗-未来十年Python的前景会怎样?
- js修改地址栏url_前端实战总结如何在不刷新页面的情况下改变URL
- 验证码生成工具google authenticator
- nginx源码包安装
- 求助wpe封包遇到动态验证怎么办
- cas session共享
- 信息安全管理——网络安全监管
- SpringBoot线程池实现200w数据快速落库
- 数据结构考研:大O表示法最浅显易懂且详细深入的解释及与小o表示法的区别(十分钟必懂)
- matlab获取2的整数次幂,如何快速判断正整数是2的N次幂