• bzoj5106 [CodePlus2017]汀博尔 二分


    [CodePlus2017]汀博尔

    Time Limit: 10 Sec  Memory Limit: 512 MB
    Submit: 202  Solved: 75
    [Submit][Status][Discuss]

    Description

    有n棵树,初始时每棵树的高度为Hi,第i棵树每月都会长高Ai。现在有个木料长度总量为S的订单,客户要求每块
    木料的长度不能小于L,而且木料必须是整棵树(即不能为树的一部分)。现在问你最少需要等多少个月才能满足
    订单。

    Input

    第一行3个用空格隔开的非负整数n,S,L,表示树的数量、订单总量和单块木料长
    度限制。
    第二行n个用空格隔开的非负整数,依次为H1,H2,...,Hn。
    第三行n个用空格隔开的非负整数,依次为A1,A2,...,An。
    1<=N<=200000,1<=S,L<=10^18,1<=Hi,Ai<=10^9

    Output

    输出一行一个整数表示答案。

    Sample Input

    3 74 51
    2 5 2
    2 7 9

    Sample Output

    7
    【 Hints】
    对于样例,在六个月后,各棵树的高度分别为 14, 47, 56,此时无法完成订单。在七个月后,各棵树的高度分别
    为 16, 54, 65,此时可以砍下第 2 和第 3 棵树完成订单了。

    HINT

    来自 CodePlus 2017 11 月赛,清华大学计算机科学与技术系学生算法与竞赛协会 荣誉出品。

    Credit:idea/郑林楷 命题/郑林楷 验题/王聿中

    Git Repo:https://git.thusaac.org/publish/CodePlus201711

    本次比赛的官方网址:cp.thusaac.org

    感谢腾讯公司对此次比赛的支持。

    Source

    题解:

      就是裸的二分答案。

     1 #include<cstring>
     2 #include<cmath>
     3 #include<algorithm>
     4 #include<iostream>
     5 #include<cstdio>
     6 
     7 #define N 200007
     8 #define ll long long
     9 using namespace std;
    10 inline int read()
    11 {
    12     int x=0,f=1;char ch=getchar();
    13     while(ch>'9'||ch<'0'){if (ch=='-') f=-1;ch=getchar();}
    14     while(ch<='9'&&ch>='0'){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}
    15     return x*f;
    16 }
    17 
    18 int n;
    19 ll a[N],h[N],S,L,mx;
    20 
    21 bool check(ll day)
    22 {
    23     ll ans=0;
    24     ll now;
    25     for(int i=1;i<=n;i++)
    26     {
    27         now = a[i]*day+h[i];
    28         if(now>=L) ans+=now;
    29         if(ans>=S) return true;
    30     }
    31     return false;
    32 }
    33 int main()
    34 {
    35     cin>>n>>S>>L;
    36     for(int i=1;i<=n;i++) cin>>h[i];
    37     for(int i=1;i<=n;i++) cin>>a[i],mx=max(mx,max(L,S)/a[i]);
    38     ll l=0,r=mx,ans=0;
    39     while(l<=r)
    40     {
    41         ll mid=(l+r)>>1;
    42         if(check(mid)) r=mid-1;
    43         else l=mid+1;
    44     }
    45     printf("%lld",l);
    46 }
  • 相关阅读:
    TJU_SCS_软件测试_lab2_Selenium
    TJU_SCS_软件测试_homework3
    阅读《基于谱聚类的终端区飞行轨迹分析》笔记
    阅读《基于转弯点聚类的航空飞行轨迹分析》笔记
    TJU_SCS_软件测试_Lab1
    TJU_SCS_软件测试_homework2
    TJU_SCS_软件测试_homework1——《error impressed me most》
    TJU_SCS_C#学习笔记(10)
    TJU_SCS_C#学习笔记(9)
    TJU_SCS_C#学习笔记(8)
  • 原文地址:https://www.cnblogs.com/fengzhiyuan/p/8119356.html
Copyright © 2020-2023  润新知