• CodeChef FORESTGA 二分


    Forest Gathering 

     
    Problem code: FORESTGA

    All submissions for this problem are available.

    Read problems statements in Mandarin ChineseRussian and Vietnamese as well.

    Chef is the head of commercial logging industry that recently bought a farm containing N trees. You are given initial height of the i-th tree by Hi and the rate of growth of height as Ri meters per month. For simplicity, you can assume that all the trees are perfect cylinders of equal radius. This allows us to consider only the height of trees when we talk about the amount of wood.

    In Chef's country, laws don't allow one to cut a tree partially, so one has to cut the tree completely for gathering wood. Also, laws prohibit cutting trees of heights (strictly) lower than L meters.

    Today Chef received an order of W meters (of height) of wood. Chef wants to deliver this order as soon as possible. Find out how minimum number of months he should wait after which he will able to fulfill the order. You can assume that Chef's company's sawing machines are very efficient and take negligible amount of time to cut the trees.

    Input

    There is a single test case per test file.

    The first line of the input contains three space separated integers NW and L denoting the number of trees in the farm, the amount of wood (in meters) that have to be gathered and the minimum allowed height of the tree to cut.

    Each of next N lines contain two space separated integers denoting Hi and Ri respectively.

    Output

    Output a single integer denoting the number of months that have to pass before Chef will be able to fulfill the order.

    Constraints

    • 1 ≤ N ≤ 105
    • 1 ≤ WL ≤ 1018
    • 1 ≤ HiRi ≤ 109

    Subtasks

    • Subtask #1 [40 points]: 1 ≤ NWL ≤ 104
    • Subtask #2 [60 points]: No additional constraints

    Example

    Input:
    3 74 51
    2 2
    5 7
    2 9
    
    Output:
    7
    

    Explanation

    After 6 months, heights of each tree will be 1447 and 56 respectively. Chef is allowed to cut only the third tree, sadly it is not enough to fulfill an order of 74 meters of wood.

    After 7 months, heights of each tree will be 1654 and 65 respectively. Now Chef is allowed to cut second and third trees. Cutting both of them would provide him 119 meters of wood, which is enough to fulfill the order.

    题意:给你n棵数,首先给你三个树,树的数量n,需要砍的长度w,树的最小砍伐高度l;

       n行,起始高度和每天增加长度;

    思路:二分查找答案,防止爆long long 用减法;

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    #define mod 100000007
    #define esp 0.00000000001
    const int N=2e5+10,M=1e6+10,inf=1e9;
    struct is
    {
        ll b,inc;
    }a[N];
    ll x,w,l;
    int check(ll mid)
    {
        ll c=l;
        ll g=w;
        for(ll i=1;i<=x;i++)
        {
            ll k=(c-a[i].b)/a[i].inc;
            ll j=(g-a[i].b)/a[i].inc;
            if((c-a[i].b)%a[i].inc!=0)
            k++;
            if((g-a[i].b)%a[i].inc!=0)
            j++;
            if(mid>=k)
            {
                    if(mid>=j)
                    return 1;
                    else
                    g-=mid*a[i].inc+a[i].b;
            }
        }
        if(g<=0)
        return 1;
        return 0;
    }
    int main()
    {
        ll i,t;
        while(~scanf("%lld%lld%lld",&x,&w,&l))
        {
            for(ll i=1;i<=x;i++)
            scanf("%lld%lld",&a[i].b,&a[i].inc);
            ll st=0;
            ll en=1e18;
            while(st<en)
            {
                ll mid=(st+en)>>1;
                if(check(mid))
                en=mid;
                else
                st=mid+1;
            }
            if(check(st))
            printf("%lld
    ",st);
            else if(check(st-1))
            printf("%lld
    ",st-1);
        }
        return 0;
    }
     
    / 2
     
     
     
    May Challenge 2016
    FORESTGA: Forest Gathering
    题目描述
    大厨是一个伐木工厂的老板,最近他购买了一个农场,其中有
    N
    棵树。我们知道每棵树的初
    始高度
    H
    i
    和每月这棵树会增长的高度
    R
    i
    。为简单起见,我们假设所有树都是具有相同半径的圆
    柱体,因此我们只需关注树的高度。
    在大厨所在的国家里,法律不允许将树砍下一部分,因此伐木时必须完整砍下一棵树。同时,
    法律也不允许砍下高度小于
    L
    的树。
    这天大厨收到了一个订单,要求提供高度共
    W
    的木料。大厨想要尽快完成这笔生意,因此他
    想知道最少需要等树生长几个月才能完成订单。假设砍树所需的时间可以忽略不计。
    输入格式
    输入数据的第一行包含三个整数
    N
    W
    L
    ,分别代表树的棵数、订单要求的树高,以及最
    低能砍的树的树高。
    接下来
    N
    行,每行描述一棵树,包含两个整数
    H
    i
    R
    i
    输出格式
    输出一行,包含一个整数,代表大厨最少需要等的月份数。
    数据范围和子任务
    1
    N
    10
    5
    1
    W;L
    10
    18
    1
    H
    i
    ;R
    i
    10
    9
    子任务
    1
    40
    ):
    1
    N;W;L
    10
    4
    子任务
    2
    60
    ):
    无附加限制
    样例数据
    输入
    3 74 51
    2 2
    5 7
    2 9
    输出
    7
    样例解释
    六个月后,各棵树的高度为
    14
    47
    56
    ,大厨只能砍下第
    3
    棵树,无法完成订单。
    七个月后,各棵树的高度为
    16
    54
    65
    ,此时可以砍下第
    2
    和第
    3
    棵树,可以完成订单了。
    1
     
     
    May Challenge 2016
    时间限制
    1
    Problem Setter: Maksym Bevza
    Problem Tester: Kevin Charles Atienza
    Translated by: Hu Zecong
    2
  • 相关阅读:
    py2exe
    Microsoft Visual C++ Compiler for Python 2.7
    BeautifulSoup-find,findAll
    用vc生成可被python调用的dll文件
    xp下安装jdk8
    jython安装
    java java.lang.NoClassDefFoundError 的解决办法
    Python聊天室
    我的IOT入门课程上线了。
    Mybatis的CRUD操作
  • 原文地址:https://www.cnblogs.com/jhz033/p/5669442.html
Copyright © 2020-2023  润新知