前言

这什么题啊,不就是个二分答案我从65到100都经历了一遍……(瞬间气哭)

\(\sf {Solution}\)

题目理解起来不难的,大意就懒得写了。

一眼二分答案。

此题属于在形如 \(\{0,0,0....1,1,1,\}\) 的序列中查找第一个 \(1\) 的题型。

算法流程:

  1. 初始化 \(l=0,r=inf\) ( \(r\) 尽可能大)。
  2. 如果 \(l=r\) ,停止循环。
  3. 计算中点 \(mid=\left\lfloor\dfrac{l+r}{2}\right\rfloor\)。
  4. 若等待 \(mid\) 个月满足条件, \(r=mid\) 。
  5. 否则 \(l=mid+1\) 。
  6. 回到2。

至于如何判断是否满足条件,写一个函数check一下就珂以了啦~

\(\sf {P.S.}\)

什么都要开unsigned long long,否则会WA的很惨。

\(\sf {Code}\)

#include<cstdio>
using namespace std;
unsigned long long n,s,k,mid,a[200005],h[200005];
bool check(unsigned long long x)
{
unsigned long long ans=0;
for(unsigned long long i=1;i<=n;++i)
if(h[i]+x*a[i]>=k)//超过要求高度的树计算在总长度范围内
ans+=h[i]+x*a[i];
if(ans>=s)
return true;
return false;//如果满足订单需求就返回true
}
int main()
{
scanf("%lld%lld%lld",&n,&s,&k);
for(int i=1;i<=n;++i)
scanf("%lld",&h[i]);
for(int i=1;i<=n;++i)
scanf("%lld",&a[i]);
unsigned long long l=0,r=10000000000000000;//l和r的初始化
while(l<r)
{
mid=(l+r)/2;
if(check(mid))
r=mid;
else l=mid+1;
}//二分
printf("%lld",l);//输出结果
return 0;
}

最新文章

  1. WebClient 实现多文件/文本同时上传
  2. [转载]盒模型display:-webkit-box;的使用
  3. Android的Touch事件处理机制
  4. Maven之问题解决汇总
  5. linux下安装小鹤双拼-鹤形
  6. Tortoise SVN Clean up失败的解决方法
  7. RMAN - 备份异机恢复
  8. 【转】xcode APP 打包以及提交apple审核详细流程(新版本更新提交审核)
  9. C语言头文件的作用
  10. Python进阶(面向对象编程基础)(三)
  11. 读书笔记:java并发
  12. Maven 搭建SpringMvc+Spring+Mybatis详细记录
  13. Class类 获取Class对象
  14. MySQL (八)-- 事务、变量、触发器
  15. winform中执行任务,解决未响应界面
  16. Java中删除第一个集合中以某某开头的元素,删除第二个集合中以某某结尾的元素,并合并成一个集合
  17. flask sqlchemy 多对多的自引用关系定义
  18. CAS 单点登录4.24版本 登录调用其它系统并且返回客户端用其它的用户信息改造
  19. as3 typeof 对象类型与返回结果对照表 is as
  20. ReactNative应用&lt;DCL每日查看&gt;开发总结

热门文章

  1. 创新能力加速产业发展,SphereEx 荣获“中关村银行杯”『大数据与云计算』领域 TOP1
  2. jbd2的死锁分析
  3. 关于Copy On Write Array List,你会安全使用么
  4. Get请求使用请求体传递参数会报400异常的问题
  5. 第三十一篇:vue3和vue2的不同
  6. 闭包 与 js内存管理
  7. JavaWeb核心篇(3)——JSP,MVC,三层架构
  8. 02-MyBatisPlus入门
  9. 新增一个Redis 从节点为什么与主节点的key数量不一样呢?
  10. ProxySQL 配置ProxySQL