zoukankan      html  css  js  c++  java
  • 2014 微软 编程之美初赛第一场 题目3 : 活动中心

    题目链接

    题目3 : 活动中心

    时间限制:12000ms
    单点时限:6000ms
    内存限制:256MB

    描述

    A市是一个高度规划的城市,但是科技高端发达的地方,居民们也不能忘记运动和锻炼,因此城市规划局在设计A市的时候也要考虑为居民们建造一个活动中心,方便居住在A市的居民们能随时开展运动,锻炼强健的身心。

    城市规划局希望活动中心的位置满足以下条件:

    1. 到所有居住地的总距离最小。

    2. 为了方便活动中心的资源补给和其他器材的维护,活动中心必须建设在A市的主干道上。

    为了简化问题,我们将A市摆在二维平面上,城市的主干道看作直角坐标系平的X轴,城市中所有的居住地都可以看成二维平面上的一个点。

    现在,A市的城市规划局希望知道活动中心建在哪儿最好。

    输入

    第一行包括一个数T,表示数据的组数。

    接下来包含T组数据,每组数据的第一行包括一个整数N,表示A市共有N处居住地

    接下来N行表示每处居住地的坐标。

    输出

    对于每组数据,输出一行“Case X: Y”,其中X表示每组数据的编号(从1开始),Y表示活动中心的最优建造位置。我们建议你的输出保留Y到小数点后6位或以上,任何与标准答案的绝对误差或者相对误差在10-6以内的结果都将被视为正确。

    数据范围

    小数据:1 ≤ T ≤ 1000, 1 ≤ N ≤ 10

    大数据:1 ≤ T ≤ 10, 1 ≤ N ≤ 105

    对于所有数据,坐标值都是整数且绝对值都不超过106

    样例解释

    样例1:活动中心的最优建造位置为(1.678787, 0)

    样例输入
    1
    3
    1 1
    2 2
    3 3
    
    样例输出   Case 1: 1.678787




    思路 :  比赛的时候一直想二分结果没二出来,后来比完了同学说是三分..........倒是有人用了二分,不过有用一个公式.链接
     1 //活动中心
     2 #include <iostream>
     3 #include <stdio.h>
     4 #include <cmath>
     5 using namespace std;
     6 
     7 const double eps = 1e-8 ;
     8 struct Point
     9 {
    10     int x,y;
    11 } point[100200];
    12 int n;
    13 double distanc(double st)
    14 {
    15     double ans = 0 ;
    16     for(int i = 0 ; i < n ; i++)
    17         ans += sqrt((1.0*point[i].x-st)*(1.0*point[i].x-st)+1.0*point[i].y*point[i].y);
    18     return ans;
    19 }
    20 int main()
    21 {
    22     int T,i,cas = 1 ;
    23     double minn,maxx;
    24     scanf("%d",&T) ;
    25     while(T--)
    26     {
    27         scanf("%d",&n);
    28         minn = 100000000.0;
    29         maxx = -100000000.0;
    30         for(i = 0 ; i < n ; i++)
    31         {
    32             scanf("%d %d",&point[i].x,&point[i].y);
    33             if(minn > point[i].x)
    34                 minn = point[i].x;
    35             if(maxx < point[i].x)
    36                 maxx = point[i].x;
    37         }
    38         double midl,midr,lans,rans;
    39         while(maxx-minn > eps)
    40         {
    41             midl = (minn + maxx) / 2;
    42             midr = (midl + maxx) / 2;
    43             lans = distanc(midl) ;
    44             rans = distanc(midr) ;
    45             if(lans > rans) minn = midl;
    46             else maxx = midr;
    47         }
    48         printf("Case %d: %.6lf
    ",cas++,maxx);
    49     }
    50     return 0;
    51 }
    View Code
  • 相关阅读:
    离线安装SharePoint 2010必备组件下载链接
    skrollr——兼容性超强的视差滚动js插件
    Heroku实战入门(二)简单实战
    xp中安装sybase15.7遇到的三个问题
    思科三层交换机开启路由模式的方法
    Heroku实战入门(一)初识heroku
    Heroku实战入门(三)常用命令
    Splinter——开源的轻量级前端测试工具
    Request.ServerVariables 转
    Page.MaintainScrollPositionOnPostBack 属性
  • 原文地址:https://www.cnblogs.com/luyingfeng/p/3687401.html
Copyright © 2011-2022 走看看