ZYN砍树-程序员宅基地

技术标签: c/c++  

6200: ZYN砍树

时间限制: 1 Sec  内存限制: 128 MB
提交: 145  解决: 40
[提交] [状态] [讨论版] [命题人:admin]

题目描述
WDWY ZYN需要砍倒M米长的木材。这是一个对ZYN来说很容易的工作,因为他有一个漂亮的新伐木机,可以像野火一样砍倒森林。不过,ZYN只被允许砍倒单行树木。
ZYN的伐木机工作过程如下:ZYN设置一个高度参数H(米),伐木机升起一个巨大的锯片到高度H,并锯掉所有的树比H高的部分(当然,树木不高于H米的部分保持不变)。ZYN就行到树木被锯下的部分。
例如,如果一行树的高度分别为20,15,10和17,ZYN把锯片升到15米的高度,切割后树木剩下的高度将是15,15,10和15,而ZYN将从第1棵树得到5米,从第4棵树得到2米,共得到7米木材。
ZYN非常关注生态保护,所以他不会砍掉过多的木材。这正是他为什么尽可能高地设定伐木机锯片的原因。帮助ZYN找到伐木机锯片的最大的整数高度H,使得他能得到木材至少为M米。换句话说,如果再升高1米,则他将得不到M米木材。
当然了,ZYN那么完蛋肯定找不到这个最大高度,请你帮帮他。
 

 

输入
第1行:2个整数N和M,N表示树木的数量(1<=N<=1000000),M表示需要的木材总长度(1<=M<=2000000000)
第2行:N个整数表示每棵树的高度,值均不超过1000000000。所有木材长度之和大于M,因此必有解。

 

输出
第1行:1个整数,表示砍树的最高高度。

 

样例输入

复制样例数据

5 20
4 42 40 26 46
样例输出
36
Solution:二分答案。
#include<bits/stdc++.h>
#define REP(i, a, b) for(int i = (a); i <= (b); ++ i)
#define REP(j, a, b) for(int j = (a); j <= (b); ++ j)
#define PER(i, a, b) for(int i = (a); i >= (b); -- i)
using namespace std;
typedef long long ll;
const int maxn=1e6+5;
template <class T>
inline void rd(T &ret){
    char c;
    ret = 0;
    while ((c = getchar()) < '0' || c > '9');
    while (c >= '0' && c <= '9'){
        ret = ret * 10 + (c - '0'), c = getchar();
    }
}
int n;
ll p[maxn],l=1,r,ans,m;
bool ok(int cur){
     ll now=0;
     REP(i,1,n)if(p[i]>cur)now+=p[i]-cur;
     if(now>=m)return true;
     else return false;
}
int main(){
    rd(n),rd(m);
    REP(i,1,n)rd(p[i]),r=max(r,p[i]);
    while(l<=r){
        int mid=l+r>>1;
        if(ok(mid))ans=mid,l=mid+1;
        else r=mid-1;
    }
    cout<<ans<<endl;
    return 0;
}
#include<bits/stdc++.h>
#define REP(i, a, b) for(int i = (a); i <= (b); ++ i)
#define REP(j, a, b) for(int j = (a); j <= (b); ++ j)
#define PER(i, a, b) for(int i = (a); i >= (b); -- i)
using namespace std;
typedef long long ll;
const int maxn=1e6+5;
template <class T>
inline void rd(T &ret){
    char c;
    ret = 0;
    while ((c = getchar()) < '0' || c > '9');
    while (c >= '0' && c <= '9'){
        ret = ret * 10 + (c - '0'), c = getchar();
    }
}
int n;
ll p[maxn],l=1,r,ans,m;
bool ok(int cur){
     ll now=0;
     REP(i,1,n)if(p[i]>cur)now+=p[i]-cur;
     if(now>=m)return true;
     else return false;
}
int main(){
    rd(n),rd(m);
    REP(i,1,n)rd(p[i]),r=max(r,p[i]);
    while(l<=r){
        int mid=l+r>>1;
        if(ok(mid))ans=mid,l=mid+1;
        else r=mid-1;
    }
    cout<<ans<<endl;
    return 0;
}

 

 

转载于:https://www.cnblogs.com/czy-power/p/10402944.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_33852020/article/details/93708186

智能推荐

公众号H5 微信 JS-SDK 使用_微信js-sdk跳转url地址的 h5 公众号-程序员宅基地

文章浏览阅读684次。借鉴微信官方步骤一:绑定域名先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。备注:本地开发 微信测试平台账号中配置JS接口安全域名登录后可在“开发者中心”查看对应的接口权限。步骤二:引入JS文件在需要调用JS接口的页面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.6.0.js如需进一步提升服务稳定性,当上述资源不可访问时,可改访问:http://res2.wx.qq.com/._微信js-sdk跳转url地址的 h5 公众号

java前端easyui中datagrid表格点击表头排序_easyui datagrid 点击表头 排序 其他页不排序-程序员宅基地

文章浏览阅读3.3k次,点赞2次,收藏4次。easyui客户端排序不正确,引用服务端进行排序。_easyui datagrid 点击表头 排序 其他页不排序

【2023最新】超详细图文保姆级教程:App开发新手入门(3)_app定制开发基础教学-程序员宅基地

文章浏览阅读1.5k次。2023年最详细的保姆级App开发快速入门教程(3),面向初级新手同学,通过使用YonBuilder移动开发技术,可以让开发同学仅用Web前端技术(HTML、CSS、JavaScript),就可以完成Android 和 iOS App客户端的开发。_app定制开发基础教学

Redash可视化开放接口_metabase hide_parameters-程序员宅基地

文章浏览阅读1.3k次,点赞2次,收藏2次。前言:近来越来越多的朋友关心Redash中文版的可视化开放接口问题,视图和报表能在其它应用的网页里吗?当然能,作为开源平台Redash的可视化接口做到相当到位。一、视图的开放接口:Redash的视图本身就是支持开放接口,点视图左下角的折叠菜单,选“嵌入到其它应用程序”就可生成该视图的外部调用API:形如http://localhost:5000/embed/query/9/visualization/18?api_key=jW3MmyT5Gnx6HSG3H9AJJpWb2wPUhS0rKoKub_metabase hide_parameters

echarts多条折线图和柱状图实现_echarts多列柱状图多列折线-程序员宅基地

文章浏览阅读3k次。参考链接:echarts官网:http://echarts.baidu.com/原型图(效果图):图片.png代码:&lt;!DOCTYPE html&gt;&lt;html&gt; &lt;head&gt; &lt;meta charset="UTF-8"&gt; &lt;title&gt;&lt;/titl.._echarts多列柱状图多列折线

(CUBA)学新东西的第一天_如何学习cuba编程-程序员宅基地

文章浏览阅读2.6k次。很多写程序的大佬都说不管什么语言你只要学会一门语言,那学其他的语言就是小ks(不在话下,简单啊!!!)。其次就是开发工具了,如果是自己常用的还好,比如进公司或者换公司,就会有很大可能性会换技术和开发工具,熟悉开发工具和新学一门语言或者一个框架,对于刚毕业的我们来说还是很有挑战的,当然,也不是没有特别厉害的人一学就会,一上手就能势如破竹的开始写程序。比如我自己就正在学一个新的框架叫CUBA,这个框架是一个开源的框架,并且在网上的好评也非常的多,最大的优点应该就是稳定了。通过第一天的学习,大概了解一下这个框架_如何学习cuba编程

随便推点

机器学习理论基础:线代相关、PCA、KKT条件、贝叶斯统计、最大似然估计-程序员宅基地

文章浏览阅读3.1k次,点赞10次,收藏22次。本篇博客参考《Deep Learning》的理论基础部分,对线性代数相关与证明、PCA、KKT条件、贝叶斯统计和最大似然估计进行简单总结,以便加深理解和记忆_kkt条件

估计流量矩阵的方法-程序员宅基地

文章浏览阅读2.1k次,点赞2次,收藏6次。自于牛顿的万有引力模型,它是一种简单的流量矩阵估计算法。在牛顿万有引力定律中指出,地球上任何两个物体都是相互吸引的,引力的大小跟这两个物体的质量乘积成正比,跟它们的距离的平方成反比,揭示了地球上万物之间引力和质量,距离的关系。重力模型是一种附加链路信息反演方法。公式为:Xij是矩阵元素,表示从i节点到j节点流动元素的量,Ri表示的是离开节点i所相关的排斥因素是一个参数。Aj表示进入节点j所相关的吸引因素也是一个参数。fij表示从节点i到节点j的摩擦因素。_流量矩阵

mfc 通过 MapWinGIS 控件读取 shp 文件_mfc画shp-程序员宅基地

文章浏览阅读4.4k次。记录一下这两天努力的收获,刚来这个公司一周不到,这几天一直在看GIS相关的东西。首先调通了第一个android 通过 jni 调用 C/C++代码然后花了两天做了一个mfc 用 MapWinGIS.ocx 控件读取shp格式文件哎。。。回头看看,这么简单的东西竟然用了两天时间,简直太浪费时间了没办法,新手上路不容易呀!参考原文:http://blog.csdn.net/_mfc画shp

TensorFlow gfile文件操作详解-程序员宅基地

文章浏览阅读306次。转:https://blog.csdn.net/u014182497/article/details/80681331一、gfile模块是什么gfile模块定义在tensorflow/python/platform/gfile.py,但其源代码实现主要位于tensorflow/tensorflow/python/lib/io/file_io.py,那么gfile模块主要功..._gfile

python按照列写入csv文件_python按列写入csv-程序员宅基地

文章浏览阅读2.4w次,点赞15次,收藏47次。python按照列写入csv文件可以利用pandas包来按照列写入csv文件:import pandas as pd#a和b的长度必须保持一致,否则报错a = [x for x in range(5)]b = [x for x in range(5,10)]#字典中的key值即为csv中列名dataframe = pd.DataFrame({'a_name':a,'b_name':b..._python按列写入csv

GB28181协议实现系列之----SDK Demo发布(7)_gb28181 demo-程序员宅基地

文章浏览阅读3.2k次。GB28181_IPC_NVR SDK Demo发布_gb28181 demo

推荐文章

热门文章

相关标签