zoukankan      html  css  js  c++  java
  • 洛谷P1316 丢瓶盖

    题目描述

    陶陶是个贪玩的孩子,他在地上丢了A个瓶盖,为了简化问题,我们可以当作这A个瓶盖丢在一条直线上,现在他想从这些瓶盖里找出B个,使得距离最近的2个距离最大,他想知道,最大可以到多少呢?

    输入输出格式

    输入格式:

    第一行,两个整数,A,B。(B<=A<=100000)

    第二行,A个整数,分别为这A个瓶盖坐标。

    输出格式:

    仅一个整数,为所求答案。

    输入输出样例

    输入样例#1: 复制
    5 3
    1 2 3 4 5
    
    输出样例#1: 复制
    2
    

    说明

    限时3秒

    跟跳石子一样

    直接二分答案即可

    #include<cstdio>
    #include<cmath>
    #include<algorithm>
    #include<cstring>
    #include<iostream>
    using namespace std;
    const int MAXN=1e6+10;
    const int INF=0x7fffffff;
    inline char nc()
    {
        static char buf[MAXN],*p1=buf,*p2=buf;
        return p1==p2&&(p2=(p1=buf)+fread(buf,1,MAXN,stdin))?EOF:*p1++;
    }
    inline int read()
    {
        char c=nc();int f=1,x=0;
        while(c<'0'||c>'9'){if(c=='-')f=-1;c=nc();}
        while(c>='0'&&c<='9'){x=x*10+c-'0',c=nc();}
        return x*f;
    }
    int a[MAXN],n,m;
    int check(int val)
    {
        int now=a[1],nownum=1;
        for(int i=2;i<=n;i++)
            if(a[i]-now>=val)  
                now=a[i],nownum++;
        return nownum>=m;
    }
    int main()
    {
        #ifdef WIN32
        freopen("a.in","r",stdin);
        #else
        #endif
        n=read();m=read();
        for(int i=1;i<=n;i++)   a[i]=read();
        sort(a+1,a+n+1);
        int l=0,r=INF,ans=0;
        while(l<=r)
        {
            int mid=(l+r)>>1;
            if(check(mid))  ans=mid,l=mid+1;
            else r=mid-1;
        }
        printf("%d",ans);
        return 0;
    }
  • 相关阅读:
    python并发之concurrent.futures
    全局解释器锁--GIL
    ASP 注释
    ASPxGridView 下拉框不让输入
    leftjoin及多个leftjoin执行顺序
    视图view没有主键,但可以添加唯一索引
    ASPxGridView KeyFieldName
    联合主键
    AspxGridView使用教程
    ASP Session 对象
  • 原文地址:https://www.cnblogs.com/zwfymqz/p/7875434.html
Copyright © 2011-2022 走看看