River Hopscotch

http://poj.org/problem?id=3258

/*A.题
牛要到河对岸,在与河岸垂直的一条线上,河中有N块石头,给定河岸宽度L,以及每一块石头离牛所在河岸的距离,

现在去掉M块石头,要求去掉M块石头后,剩下的石头之间以及石头与河岸的最小距离的最大值。

注意题目给的距离不一定是按照从小到大的顺序给的,所以需要给距离排序。

做题思想:二分所求的最小距离的最大值mid,记录可以去掉的石头块数cnt

根据cnt和M的大小关系来决定减去哪部分区间。代码:
*/
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <vector>
#include <string.h>
using namespace std;
const int N = 50010;
int arr[N];
int main()
{
    int L,n,m;
    scanf("%d%d%d",&L,&n,&m);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",arr+i);
    }
    arr[0]=0;
    arr[n+1]=L;
    sort(arr,arr+n+2);
    int lef=1,rig=L+1,mid,curr;
    while(rig-lef>1)
    {
        mid=(lef+rig)>>1;//最小距离
        int last=0,cnt=0;
        for(int i=1;i<=n;i++)
        {
            if(arr[i]-arr[last]<mid)
            {
                cnt++;
            }
            else
            {
                last=i;
            }
        }
        if((last!=0)&&(arr[n+1]-arr[last]<mid)) cnt++;
        if(cnt>m) rig=mid;
        else lef=mid;
    }
    printf("%d\n",lef);

}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • #「Daily Scrum 每日站会」 ===...
    钟超的阅读 127评论 0 0
  • 灰蓝的天空中,不断投下淅淅沥沥的小雨,珍珠般大小的雨滴掉落地面,打出一朵朵水花,氤氲的水雾漂浮在空气中,空气...
    玻璃指尖阅读 601评论 0 0
  • 由于一直致力于自己创业,故对商业管理 销售 广告这类型的书特别感兴趣,在搜广告方面的书时搜到了这本元老级的书《广告...
    追梦人11阅读 1,212评论 0 3
  • (一) 很多人的童年都是快乐而美好的,可我的小学基本上却是在纠结中度过的。 我的妈妈属于完美型的人格,我做的所有事...
    幽兰君阅读 217评论 0 2
  • 希望你有高跟鞋也有跑鞋,喝茶也喝酒。希望你有勇敢的朋友,有牛逼的对手。希望你对想要的未来抵死执着,但当下却无急迫神...
    33Z阅读 331评论 0 0