zoukankan      html  css  js  c++  java
  • [FZYZOJ 1200] 路由器安置

    P1200 -- 路由器安置

    时间限制:1000MS

    内存限制:131072KB

    Description

    一条街道安装无线网络,需要放置M个路由器。整条街道上一共有N户居民,分布在一条直线上,每一户居民必须被至少一台路由器覆盖到。现在的问题是所有路由器的覆盖半径是一样的,我们希望用覆盖半径尽可能小的路由器来完成任务,因为这样可以节省成本。

    Input Format

    输入第一行包含两个整数M和N,以下N行每行一个整数Hi表示该户居民在街道上相对于某个点的坐标。

    Output Format

    输出仅包含一个数,表示最小的覆盖半径,保留一位小数。

    Sample Input

    2 3
    1
    3
    10 
    

    Sample Output

    1.0  

    Hint

    【样例输出】(在2,10位置上各放一个)

    【数据规模】

    对于60%的数据,有1 ≤N, M ≤100,-1000 ≤Hi ≤1000;

    对于100%的数据,有1 ≤N, M ≤100000,-10000000 ≤Hi ≤10000000。

    【题解】

    二分答案,然后判断是否符合,枚举即可。

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int n,m,l,r,mid;
     4 int p[100010];
     5 char B[1<<15],*S=B,*T=B;
     6 char getchar2() {
     7     return S==T&&(T=(S=B)+fread(B,1,1<<15,stdin),S==T)?0:*S++;
     8 }
     9 int read() {
    10     int x=0; int f=1;
    11     char ch=getchar2();
    12     while(ch<'0'||ch>'9') {if(ch=='-') f=-1; ch=getchar2();}
    13     while(ch>='0'&&ch<='9') {x=(x<<3)+(x<<1)+ch-'0'; ch=getchar2();}
    14     return x*f;
    15 }
    16 int main() {
    17     m=read();n=read();
    18     for(int i=1;i<=n;i++) p[i]=read();
    19     sort(p+1,p+n+1);
    20     for(l=0,r=p[n]-p[1],mid=(l+r)/2;l<r;mid=(l+r)/2) {
    21         int c=0,to=-987654321;
    22         for(int i=1;i<=n;i++)
    23             if(p[i]>to) {
    24                    c++;
    25                    to=p[i]+mid;
    26             }
    27         if(c>m) l=mid+1;
    28         else r=mid;
    29     }
    30     printf("%.1lf",l/2.0);
    31     return 0;
    32 }
    View Code

    0.119s,再一次rank1 =-=

  • 相关阅读:
    Codeforces 877 C. Slava and tanks
    Codeforces 877 D. Olya and Energy Drinks
    2017 10.25 NOIP模拟赛
    2017 国庆湖南 Day1
    UVA 12113 Overlapping Squares
    学大伟业 国庆Day2
    51nod 1629 B君的圆锥
    51nod 1381 硬币游戏
    [JSOI2010]满汉全席
    学大伟业 2017 国庆 Day1
  • 原文地址:https://www.cnblogs.com/TonyNeal/p/fzyzoj1200.html
Copyright © 2011-2022 走看看