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表示, ...
随机推荐
- USACO Section2.2 Preface Numbering 解题报告 【icedream61】
preface解题报告----------------------------------------------------------------------------------------- ...
- ubuntu下eclipse 安装记录
基本是参考:http://www.metsky.com/archives/611.html 完成. 中间遇到小问题,在此记录下,方便遇到同样问题的难友. 先说下快速打开命令行快捷键:Ctrl+Alt+ ...
- 安装cloudbase-init和qga批处理
@echo off title Auto Install color 1F ::CloudBase-Init echo. msiexec /i \\192.168.122.47\cloudbase\C ...
- 洛谷P1071潜伏者(提高组)
题目描述 R国和S国正陷入战火之中,双方都互派间谍,潜入对方内部,伺机行动.历尽艰险后,潜伏于S国的R 国间谍小C终于摸清了 S 国军用密码的编码规则: 1. S国军方内部欲发送的原信息经过加密后在网 ...
- Spring 笔记(一)概念梳理
概念 预备知识 1. POJO POJO是Plain Old Java Object的缩写,是软件开发大师Martin Fowler提出的一个概念,指的是一个普通Java类.也就说,你随便编写一个Ja ...
- django orderby
https://www.douban.com/group/topic/44329052/
- Spring 学习笔记(六)—— AOP的简单理解
系统中的业务可以分为核心关注点和横切关注点. 核心关注点时业务处理的主要流程,而横切关注点是与核心业务无关但更为通用的业务. 各个横切关注点离散地穿插于核心业务之中,导致系统地每一个模块都与这些业务具 ...
- 基于linux操作系统安装、使用memcached详解
1.memcached的应用背景及作用 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态. ...
- Tomcat的context.xml说明、Context标签讲解
Tomcat的context.xml说明.Context标签讲解 1. 在tomcat 5.5之前 --------------------------- Context体现在/conf/server ...
- Windows.Forms Panel 动态加载用户控件 UserControl
创建好一个Windows Forms程序,在创建好的程序中Form1添加一个Panel控件 如图: