• 1316 丢瓶盖


    难度:普及/提高-

    题目类型:贪心/二分

    提交次数:3

    涉及知识:二分

    题目描述

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

    输入输出格式

    输入格式:

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

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

    输出格式:

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

    代码:

     1 #include<iostream>
     2 #include<algorithm>
     3 using namespace std;
     4 int a, b;
     5 const int N = 100010; 
     6 int p[N];
     7 bool check(int x){
     8     int temp = p[0];
     9     int tot = 0;
    10     for(int i = 1; i < a; i++){
    11         if(p[i]- temp < x)
    12             tot++;
    13         else temp = p[i];
    14     }
    15     
    16     if(a-tot>=b) return true;
    17     return false;
    18 }
    19 int main(){
    20     cin>>a>>b;
    21     int i;
    22     int minn = N;
    23     int maxx = 0;
    24     for(i = 0; i < a; i++){
    25         cin>>p[i];
    26         minn = min(minn, p[i]);
    27         maxx = max(maxx, p[i]);
    28     }
    29     sort(p, p+a);    
    30     int l = 1, r = maxx-minn;
    31     int ans;
    32     while(l <= r){
    33         int mid = (l+r)/2;
    34         if(check(mid)){
    35             ans = mid;
    36             l = mid+1;
    37         } 
    38         else r = mid-1;    
    39     }
    40     cout<<ans;
    41 }

    备注:

    可能是因为刚做完数列分段2那道题。。这一道完全独立思考+独立写+独立查&改错。。听说是15年day2 第一题真题?

    赤裸裸的二分,第一眼就觉得跟跳石头那道很像,写完才发现,完全是一模一样啊。唯一要考虑的点就是是a-tot>=b时return true。

    为什么我提交了3遍呢?因为给的数据并不是排好序的啊orz。。不过我还是独立想到了这一点哈哈哈哈

  • 相关阅读:
    基础数据类型
    python2x与python3x区别(30个)更新中。。。
    注释
    常量
    变量
    十、SpringCloud config分布式配置中心
    九、Gateway新一代网关
    八、Hystrix断路器(下)
    八、Hystrix断路器(上)
    七、OpenFeign服务接口调用
  • 原文地址:https://www.cnblogs.com/fangziyuan/p/5934724.html
Copyright © 2020-2023  润新知