Code+ B 汀博尔【二分答案】
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
题目描述
有 n 棵树,初始时每棵树的高度为 Hi,第 i 棵树每月都会长高 Ai。现在有个木料长度总量为 S 的订单,客户要求每块木料的长度不能小于L,而且木料必须是整棵树(即不能为树的一部分)。现在问你最少需要等多少个月才能满足订单。
输入描述:
第一行 3 个用空格隔开的非负整数 n,S,L,表示树的数量、订单总量和单块木料长度限制。
第二行 n 个用空格隔开的非负整数,依次为 H1,H2,... ,Hn。
第三行 n 个用空格隔开的非负整数,依次为 A1,A2,... ,An。
输出描述:
输出一行一个整数表示答案。
输入
3 74 51
2 5 2
2 7 9
输出
7
说明
对于样例,在六个月后,各棵树的高度分别为 14,47,56,此时无法完成订单。
在七个月后,各棵树的高度分别为 16,54,65,此时可以砍下第 2 和第 3 棵树完成订单了。
备注:
1≤n≤200000,1≤S,L≤1018,1≤Hi,Ai≤109 【分析】:二分答案。上界不能直接选择1e18,会爆long long。根据一棵树能完成需求的时间最小值不断降低时间。
【代码】:
#include <bits/stdc++.h>
#define LL long long
#define maxn 200005 using namespace std;
LL a[maxn],h[maxn],S,L,mx;
int n; bool check(LL day)
{
LL ans=;
LL now;
for(int i=;i<=n;i++)
{
now = a[i]*day+h[i];//x是天数,a是步长(增量)一个一个的增,增完下一个
if(now>=L) ans+=now;
if(ans>=S) return true;
}
return false;
}
int main()
{
cin>>n>>S>>L;
for(int i=;i<=n;i++) cin>>h[i];
for(int i=;i<=n;i++) cin>>a[i],mx=max(mx,max(L,S)/a[i]);
LL l=,r=mx,ans=;
while(l<=r)
{
LL mid=(l+r)>>;
if(check(mid)) r=mid-;
else l=mid+;
}
cout<<l<<endl;
}
#include<iostream>
#include<set>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std; typedef unsigned long long ll; ll h[],a[];
ll sum;
int main()
{
ll n,S,L,i,j,l,r,m;
while(cin>>n>>S>>L)
{
l=;r=1e18;m=(l+r)/;
for(i=;i<n;i++)
scanf("%d",&h[i]);
for(i=;i<n;i++)
scanf("%d",&a[i]);
while(l<r)
{
sum=;
for(i=;i<n;i++)
{
ll x=h[i]+m*a[i];
if(x>=L)
sum+=x;
if(sum>=S)
break;
}
if(sum>=S)
{
r=m;
}
else
{
l=m+;
}
m=(l+r)/;
}
cout<<m<<"\n";
}
return ;
}
易懂
#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long ll;
int n;
ll s,l;
ll h[],a[];
int check(ll mid)
{
ll sum=;
for(int i=;i<=n;i++)
{
if(h[i]+a[i]*mid>=l) sum+=(h[i]+a[i]*mid);
if(sum>=s) return ;
}
return ;
}
ll maxx;
int main()
{
scanf("%d%lld%lld",&n,&s,&l);
for(int i=;i<=n;i++) scanf("%lld",&h[i]);
for(int i=;i<=n;i++) scanf("%lld",&a[i]),maxx=max(maxx,a[i]);
ll l=,r=1e18/maxx,mid,ans=;
while(l<=r)
{
mid=(l+r)/;
if(check(mid)) r=mid-,ans=mid;
else l=mid+;
}
printf("%lld",ans);
}
2
Code+ B 汀博尔【二分答案】的更多相关文章
- bzoj5106 [CodePlus2017]汀博尔 二分
[CodePlus2017]汀博尔 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 202 Solved: 75[Submit][Status][Di ...
- bzoj5106: [CodePlus2017]汀博尔(二分答案)
5106: [CodePlus2017]汀博尔 题目:传送门 题解: 百题纪念!!! 原谅一下第一百题刷了到水题... 直接二分月份然后判断(注意上界大小) 代码: #include<cstdi ...
- BZOJ 5106 [CodePlus2017]汀博尔
[题解] 二分答案.r要设好,不能随便设置为max(s,len),不然check的时候会爆long long #include<cstdio> #include<algorithm& ...
- [LOJ 6249]「CodePlus 2017 11 月赛」汀博尔
Description 有 n 棵树,初始时每棵树的高度为 H_i,第 i 棵树每月都会长高 A_i.现在有个木料长度总量为 S 的订单,客户要求每块木料的长度不能小于 L,而且木料必须是整棵树(即不 ...
- [CodePlus2017]汀博尔
Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 158 Solved: 61[Submit][Status][Discuss] Description ...
- BZOJ5106: [CodePlus2017]汀博尔
[传送门:BZOJ5106] 简要题意: 给出n棵树,初始高度为h[i],每棵树每个月长高a[i] 现有一个客户,需要至少s长的总木材,而且每次截取的木材必须是一整颗树而且高度大于等于L 求出最少的月 ...
- 【二分答案】Google Code Jam Round 1A 2018
题意:有R个机器人,去买B件商品,有C个收银员,每个收银员有能处理的商品数量上限mi,处理单件商品所需的时间si,以及最后的装袋时间pi. 每个收银员最多只能对应一个机器人,每个机器人也最多只能对应一 ...
- NOIP2012疫情控制(二分答案+树上贪心)
H 国有n个城市,这 n个城市用n-1条双向道路相互连通构成一棵树,1号城市是首都,也是树中的根节点. H国的首都爆发了一种危害性极高的传染病.当局为了控制疫情,不让疫情扩散到边境城市(叶子节点所表示 ...
- 洛谷P3964 [TJOI2013]松鼠聚会 [二分答案,前缀和,切比雪夫距离]
题目传送门 松鼠聚会 题目描述 草原上住着一群小松鼠,每个小松鼠都有一个家.时间长了,大家觉得应该聚一聚.但是草原非常大,松鼠们都很头疼应该在谁家聚会才最合理. 每个小松鼠的家可以用一个点x,y表示, ...
随机推荐
- 站在C#和JS的角度细谈函数式编程与闭包
1.函数式编程是什么? 摘自百度的说法是.函数式编程是种编程典范,它将电脑运算视为函数的计算.函数编程语言最重要的基础是 λ 演算(lambda calculus).而且λ演算的函数可以接受函数当作输 ...
- Jmeter beanshell preprocessor随机添加任意多个请求参数
介绍下本次使用beanshell preprocessor的原因: 1.系统下可添加产品,一个产品可以有多个产品主题(比如:产品A(杭州三日游)拥有三个主题(研学.红学.夏令营)),我们在每次添加产品 ...
- day06_02 元组
1.0 元组 元组被称为只读列表,即数据可以被查询,但不能被修改,所以,列表的切片操作同样适用于元组.元素卸载小括号(())里,元素之间用逗号隔开. tup1 = () #空元组 tup2 = (20 ...
- Vue_初识
前端三大框架: vue:开发效率相当高了. angalar:适合做后台管理系统,入手容易,但是越往后会越难受. react:虚拟dom(渲染内存中存储的dom,经过操作后,才会去渲染浏览器的真实dom ...
- 深入理解css之float
1.float的历史 float的设计的初衷:文字环绕效果 2.包裹与破坏 增强浮动的感性认知 包裹:1.收缩 2.坚挺 3.隔绝 里面的布局和外面一点关系都没有 包裹的特性就是BFC block f ...
- .Net MVC无限循环或无限递归
错误往往是service的相互引用之类的. 好好排查
- hdu 1564 Play a game (博弈)
Play a game Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- linux shell常用语法
特殊变量 $0 当前脚本的文件名$n 传递给脚本或函数的参数.n 是一个数字,表示第几个参数.例如,第一个参数是$1,第二个参数是$2.$# 传递给脚本或函数的参数个数.$* 传递给脚本或函数的所有参 ...
- [hdu6428]Problem C. Calculate
题目大意:有$T(1\leqslant T\leqslant 10)$组数据,每组数据给你$A,B,C(0<A,B,C\leqslant 10^7)$,求$\sum\limits_{i=1}^A ...
- POJ 1061 青蛙的约会 | 同余方程和exGcd
题解: 要求s+px=t+qx (mod L) 移项 (p-q)x=t-s (mod L) 等价于 (p-q)x+Ly=t-s 即ax+by=c的方程最小非负根 exGcd后乘个C #include& ...