zoukankan      html  css  js  c++  java
  • poj 3258 River Hopscotch (二分)

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

    题意:

    一条河长度为 L,河的起点(Start)和终点(End)分别有2块石头,S到E的距离就是L。

    河中有n块石头,每块石头到S都有唯一的距离

    问现在要移除m块石头(S和E除外),每次移除的是与当前最短距离相关联的石头,要求移除m块石头后,使得那时的最短距离尽可能大,输出那个最短距离。

    代码:

    View Code
     1 #include <iostream>
     2 #include<cstdio>
     3 #include<algorithm>
     4 using namespace std;
     5 __int64 a[50010];
     6 int n,m;
     7 bool cmp(__int64 a,__int64 b)
     8 {
     9     return a<b;
    10 }
    11 int juge(__int64 mid)
    12 {
    13     int i;
    14     __int64 sum=0;
    15     int num=0;
    16     for(i=1;i<=n-1;i++)
    17     {
    18         if(sum+(a[i]-a[i-1])<=mid)
    19         {
    20             sum+=a[i]-a[i-1];
    21             num++;
    22         }
    23         else
    24         {
    25             sum=0;
    26         }
    27     }
    28     if(num<=m)
    29     return 1;
    30     else
    31     return 0;
    32 }
    33 int main()
    34 {
    35     __int64 l;
    36 
    37     while(scanf("%I64d%d%d",&l,&n,&m)!=EOF)
    38     {
    39         int i;
    40         a[0]=0;
    41         for(i=1;i<=n;i++)
    42         {
    43             scanf("%I64d",&a[i]);
    44         }
    45         a[i]=l;
    46         n=i+1;
    47         sort(a,a+n,cmp);
    48         /*for(i=0;i<n;i++)
    49         {
    50             printf("%I64d ",a[i]);
    51         }
    52         cout<<endl;*/
    53         __int64 low=l;
    54         __int64 high=l;
    55         __int64 d;
    56         for(i=0;i<n-1;i++)
    57         {
    58             d=a[i+1]-a[i];
    59             if(d<low)
    60             low=d;
    61         }
    62         //cout<<low<<" "<<high<<endl;
    63         __int64 mid;
    64         while(low<=high)
    65         {
    66             mid=(low+high)/2;
    67             if(juge(mid))
    68             low=mid+1;
    69             else
    70             high=mid-1;
    71         }
    72         cout<<low<<endl;
    73     }
    74     return 0;
    75 }
  • 相关阅读:
    LCM与GCD算法
    LCS,LIS,LICS算法
    高精度算法(C/C++)
    SystemTap
    VMware15下解决Ubuntu18.04没有网络连接问题
    Git ssh-key 配置问题
    Ubuntu18.04更换国内源
    sql 错误日志存储路径设置
    资源
    System.Data.DataTable 基本方法
  • 原文地址:https://www.cnblogs.com/wanglin2011/p/2920210.html
Copyright © 2011-2022 走看看