zoukankan      html  css  js  c++  java
  • 1650: [Usaco2006 Dec]River Hopscotch 跳石子

    题目:数轴上有n个石子,第i个石头的坐标为Di,现在要从0跳到L,每次条都从一个石子跳到相邻的下一个石子。现在FJ允许你移走M个石子,问移走这M个石子后,相邻两个石子距离的最小值的最大值是多少。

    输入:25 5 2(l m n)
    2(d[i])
    14
    11

    21
    17

    输出:4

    解析:二分枚举两个石头间的最小值x,如果有哪两块石头之间的距离小于x,就删除后面这块石头。做完后,如果删除的石头数量小于等于限定数量,则成立,否则,不成立。

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    long long p1,m,mid,l,ans,n,l1[50001],d[50001],l2[50001],lef,righ;
    bool check(long long x)
    {
      long long k1,k2;
      if (x>l) return false;
      k1=m;
      p1=0;
      for (int i=1;i<=n+1;++i)
      {
          if (d[i]-d[p1]<x) k1-=1;
          else p1=i;
      }
      k2=m;
      p1=n+1;
      for (int i=n;i>=0;--i)
      {
          if (d[p1]-d[i]<x) k2-=1;
          else p1=i;
      }
      if ((k1>=0)||(k2>=0))  return true;
      else return false;
    }
    int main()
    {
      cin>>l>>n>>m;
      for (int i=1;i<=n;++i) cin>>d[i];
      d[0]=0;
      sort(d+1,d+1+n);
      d[n+1]=l;
      lef=0;
      righ=l+3;
      while (lef<=righ)
      {                                                                                                                                       
       mid=(lef+righ)/2;
       if (check(mid)==true) 
       {
           lef=mid+1;
           if (mid>ans) ans=mid;
       }
       else righ=mid-1;
      }
      cout<<ans<<endl;
      return 0;
    }

    ps:本人代码较繁,建议参考更简洁的代码。

  • 相关阅读:
    Javascript文件加载:LABjs和RequireJS
    【译】前端开发者的基本要求
    正则基础之——NFA引擎匹配原理
    JavaScript 设计模式 安全沙箱模式
    jsdoc_toolkit
    JS判断手机浏览器
    JavaScript:Object.prototype.toString方法的原理
    FullCalendar 官方文档翻译2
    浏览器缓存机制
    jQuery.extend 函数详解
  • 原文地址:https://www.cnblogs.com/2014nhc/p/6207800.html
Copyright © 2011-2022 走看看