zoukankan      html  css  js  c++  java
  • POJ 3258 River Hopscotch 二分查找

    题意:一条长为l(1~1,000,000,000)的河中,有n(1~50,000)块可垫脚的石头(不包括起始点和终点的),给出它们与起始点的距离rock[i],现在要你移除其中的m块,使得具有最小间距的相邻两块石头之间的距离最大。

    View Code
     1 #include <stdio.h>
     2 #include <iostream>
     3 #include <algorithm>
     4 using namespace std;
     5 int cmp(const int &a,const int &b)
     6 {
     7     return a<b;
     8 }
     9 int m,n,l;
    10 int rock[50005];
    11 int dis[50005];
    12 int judge(int mid)
    13 {
    14     int i;
    15     int len;
    16     int num;
    17     num = len = 0;
    18     for(i = 1;i <= n+1;i++)
    19     {
    20         if(len+dis[i] <= mid)
    21         len+=dis[i],num++;
    22         else
    23         len = 0;
    24     }
    25 
    26     if(num <= m)
    27     return 0;
    28     return 1;
    29 }
    30 int main()
    31 {
    32     int i;
    33     while(cin>>l>>n>>m)
    34     {
    35         rock[0] = 0,rock[n+1] = l;
    36         for(i = 1;i <= n;i++)
    37         cin>>rock[i];
    38         sort(rock+1,rock+n+1,cmp);
    39         int low,high;
    40         low = l;
    41         high = l;
    42         for(i = 1;i <= n+1;i++)
    43         {
    44             dis[i] = rock[i]-rock[i-1];
    45             if(low > dis[i])
    46             low = dis[i];
    47         }
    48 
    49         int mid = (high+low)/2;
    50 
    51         while(low <= high)
    52         {
    53             if(judge(mid))
    54             high = mid-1;
    55             else
    56             low = mid+1;
    57             mid = (low+high)/2;
    58         }
    59         cout<<low<<endl;
    60     }
    61     return 0;
    62 }
  • 相关阅读:
    查询比分程序
    本周个人总结
    本周工作量及进度统计
    排球计分软件规格说明书
    我与计算机
    jenkins持续集成:定时构建语法
    kafka性能测试
    kafka简介
    kafka分区----分区如何分配到broker----生产者分区策略----消费者消费策略
    shell注释、变量、字符串、数组
  • 原文地址:https://www.cnblogs.com/0803yijia/p/2984934.html
Copyright © 2011-2022 走看看