• SSLZYC 愤怒的牛


    题目大意:
    Farmer John建造了一个有N个隔间的牛棚,这些隔间分布在一条直线上,坐标是x1,…,xN 。他的C头牛不满于隔间的位置分布,它们为牛棚里其他的牛的存在而愤怒。为了防止牛之间的互相打斗,Farmer John想把这些牛安置在指定的隔间,所有牛中相邻两头的最近距离越大越好。那么,这个最大的最近距离是多少呢?


    一道二分的题目。
    用z来表示两头牛最多相隔的距离,每次二分出z后,从第一个隔间开始枚举,如果第i个隔间与上一头牛所在的隔间的距离大于等于z,sum就加1。最终判断sum是否大于等于c,若大于等于c,l=z,否则r=z-1。


    代码:

    #include <cstdio>
    #include <algorithm>
    using namespace std;
    
    int l,r,z,a[100001],n,m,k,sum,ok,left,right;
    
    int main()
    {
        scanf("%d%d",&n,&m);
        for (int i=1;i<=n;i++)
         scanf("%d",&a[i]);
        sort(a+1,a+n+1);  //排序牛棚的位置
        l=0;
        r=a[n];
        while (l!=left||r!=right)  //二分
        {
            left=l;
            right=r;
            z=(l+r)/2+1;  //求中间数
            k=a[1]+z;
            sum=1;
            ok=0;
            for (int i=2;i<=n;i++)  //枚举每一个牛棚
            {
                if (a[i]>=k)  //如果可以放
                {
                    sum++;  //计数
                    k=a[i]+z;
                    if (sum>=m)   //如果每次间隔z的条件是成立的
                    {
                        ok=1;
                        break;  //退出循环
                    }
                }
            }
            if (ok==1) l=z;
            else r=z-1;
        }
        printf("%d\n",l);  //输出答案
        return 0;
    }
  • 相关阅读:
    Object.create() 实现
    Subpub 订阅/发布
    闭包的一种用法
    console 高级用法
    instanceof typeof
    reg 正则
    zepto js 源码 解读
    【Pro ASP.NET MVC 3 Framework】.学习笔记.8.SportsStore:管理
    【Pro ASP.NET MVC 3 Framework】.学习笔记.7.SportsStore:购物车
    【Pro ASP.NET MVC 3 Framework】.学习笔记.6.SportsStore:导航
  • 原文地址:https://www.cnblogs.com/hello-tomorrow/p/9313108.html
Copyright © 2020-2023  润新知