zoukankan      html  css  js  c++  java
  • A 无线网络

     
    Accept:29     Submit:107
    Time Limit:1000MS     Memory Limit:65536KB


    Description
    现在无线网络愈来愈普及,人们对网络质量的要求也愈来愈高。我们假设要在一条笔直的公路上安置无线网络接入点,以方便两旁的居民上网。设公路的一个终点为起点,那么居民的位置可以用他的住所到起点的距离表示,为了保证网络质量,居民点到离他最近的接入点的距离的最大值愈小愈好。现在轮到你出马来设计接入点的位置了。

    Input
    输入的第一行包含一个整数c,表示测试数据的组数。
    每组数据的第一行包含两个整数nm,分别表示要设置n个接入点(1<=n<=1000000),沿公路两旁共m户居民(1<=m<=1000000)。
    接下来m行,每行包含一个整数:x表示居民距公路起点的距离(1<=x<=1000000000)


    Output
    对每组数据,输出一个结果,保留小数点后一位,表示居民点到离他最近的接入点的距离的最大值。

    Sample Input

    1
    2 3
    1
    3
    10


    Sample Output

    1.0

    对接入点的距离的最大值二分
    #include<iostream>
    #include<stdio.h>
    #include<algorithm>
    using namespace std;
    #define M 1000010
    double arr[M];
    const double inf = 1e-6;
    int n,m;

    bool check(double t)
    {
     int i=0,cnt=0;
     double p;
     while(i<m)
     {
      p=arr[i]+t;
      while(i<m && arr[i]<=p)
       i++;
      cnt++;
      if(cnt>n) return false;
     }
     return true;
    }

    int main()
    {
     int test,i;
     scanf("%d",&test);
     
     while(test--)
     {
      scanf("%d%d",&n,&m);
      for(i=0;i<m;i++)
       scanf("%lf",&arr[i]);
      if(n>=m)
      {
       printf("0.0\n");
       continue;
      }
      sort(arr,arr+m);
      double l=0.,r=arr[m-1]-arr[0],mid;
      while(r-l>inf)
      {
       mid=(l+r)/2;
       if(check(mid))
        r=mid;
       else l=mid;
      }
      printf("%.1lf\n",l/2);
      
     }
     return 0;
    }

  • 相关阅读:
    真正的e时代
    在线手册
    UVA 10616 Divisible Group Sums
    UVA 10721 Bar Codes
    UVA 10205 Stack 'em Up
    UVA 10247 Complete Tree Labeling
    UVA 10081 Tight Words
    UVA 11125 Arrange Some Marbles
    UVA 10128 Queue
    UVA 10912 Simple Minded Hashing
  • 原文地址:https://www.cnblogs.com/qijinbiao/p/2180403.html
Copyright © 2011-2022 走看看