植物大战僵尸 (二分查找)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;
}
发布了31 篇原创文章 · 获赞 11 · 访问量 2590

猜你喜欢

转载自blog.csdn.net/guyjy/article/details/104679170