• 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 }
  • 相关阅读:
    SignalR的三个Demo
    SignalR的一点点东西
    如何在appconfig中配置服务的ip
    IP分片丢失重传
    以太网之物理层
    以太网数据格式与封装解封
    OSI七层模型与TCP/IP五层模型
    边沿检测方法-FPGA入门教程
    如何用ModelsimSE仿真IP核-以PLL为例
    搭建Modelsim SE仿真环境-使用do文件仿真
  • 原文地址:https://www.cnblogs.com/wanglin2011/p/2920210.html
Copyright © 2020-2023  润新知