zoukankan      html  css  js  c++  java
  • POJ3258 River Hopscotch(二分最大化最小值)

    题目链接:http://poj.org/problem?id=3258

    题意:给n个石头,起点和终点也是两个石头,去掉这石头中的m个,使得石头间距的最小值最大。

    思路:二分石头间的最短距离,每次贪心地check一下是否满足条件即可,具体看代码。

    AC代码:

     1 #include<iostream>
     2 #include<stack>
     3 #include<vector>
     4 #include<algorithm>
     5 #include<cmath>
     6 using namespace std;
     7 vector<int> rock;
     8 int L,N,M; 
     9 bool check(int x){
    10     int cur = 0;//上一个石头的下表 
    11     int sum = 0;
    12     for(int i = 1;i<rock.size();i++){
    13         if(rock[i]-rock[cur]<x){//如果距离小于x,则需要去掉 
    14             sum++;//统计一下 
    15         }
    16         else{
    17             cur = i;
    18         }
    19     }
    20     return sum<=M;
    21 }
    22 int main(){
    23     while(cin>>L>>N>>M){
    24         rock.clear() ;
    25         rock.push_back(0); 
    26         for(int i = 0;i<N;i++){
    27             int t;cin>>t;
    28             rock.push_back(t); 
    29         }
    30         rock.push_back(L); 
    31         sort(rock.begin(),rock.end());
    32         int l = 0,r = L*2,mid; //因为最大距离可能是L,所以区间右端点需要开到L*2 
    33         while(l<r){//二分最小距离 
    34             mid = (l+r+1)>>1;
    35             if(check(mid)){
    36                 l = mid ;
    37             }
    38             else{
    39                 r = mid - 1;
    40             }
    41         }
    42         cout<<l<<endl;
    43     }
    44     return 0;
    45 }
  • 相关阅读:
    压测 正则 性能分析
    时间复杂度 根号n
    务端如何防止重复支付 架构文摘 2021-05-02
    工具大于约定和文档
    千亿级公司低代码平台的测试体系介绍
    疑惑 题解
    计算几何相关总结
    树 题解
    矩阵加速相关总结
    loj6274 数字 题解
  • 原文地址:https://www.cnblogs.com/AaronChang/p/12169382.html
Copyright © 2011-2022 走看看