• 植物大战僵尸 (二分查找)2020 计蒜客 蓝桥杯省赛B组第二次模拟赛


    我怕侵权吃牢饭,题目就不贴上了。。。
    本题思路类似第八届蓝桥杯分巧克力那道题,为了避免超时,采用二分查找答案。
    思路:我们先确定一个防御力,然后遍历所有的位置,获得一共所需天数,如果满足题意,则向上缩小查找范围。
    代码如下:

    #include <stdio.h>
    long long n,m,a[100005];
    int ok(long long x)
    {
        long long sum=0,temp1=0,temp2=0;
        for(int i=0;i<n;i++)
        {
            if(x%a[i])
            {
                temp1=x/a[i]+1;
            }
            else
            {
                temp1=x/a[i];
            }
            temp1-=temp2;
            if(temp1>0)
            {
                temp2=temp1-1;
            }
            else
            {
                if(i!=n-1)
                {
                    temp1=1;
                	temp2=0;
                }
                else
                {
                    temp1=0;
                    temp2=0;
                }
            }
            sum+=temp1+temp2;
            if(sum>m)	return 0;
        }
        return 1;
    }
    int main()
    {
        scanf("%lld%lld",&n,&m);
        for(int i=0;i<n;i++)
            scanf("%lld",&a[i]);
        long long min=1,max=1e18,mid;
        while(min<max)
        {
            mid=(min+max)>>1;
            if(ok(mid))
                min=mid+1;
            else
                max=mid;
        }
        printf("%lld",min-1);
    	return 0;
    }
    
  • 相关阅读:
    基础练习 数列排序
    入门训练 Fibonacci数列
    入门训练 圆的面积
    入门训练 序列求和
    fzu 2111 Min Number
    入门训练 A+B问题
    历届试题 城市建设
    sort 树 hash 排序
    nyist 676 小明的求助
    快速幂 蒙格马利算法
  • 原文地址:https://www.cnblogs.com/fxzemmm/p/14848003.html
Copyright © 2020-2023  润新知