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 }
  • 相关阅读:
    仿360拖拽
    js 鼠标拖拽元素移动
    js 随机生成颜色
    vue多视图
    vue 全局组件的注册
    一键分享到QQ空间、QQ好友、新浪微博、微信代码
    vuex如何管理需要即时更新的全局变量
    js检测是哪个浏览器
    for in,Object.keys()与for of的用法与区别
    js三元运算符
  • 原文地址:https://www.cnblogs.com/AaronChang/p/12169382.html
Copyright © 2011-2022 走看看