• 编程之美-活动中心(三分)


    题目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

     

    题解

           本题是一道简单题,直接三分找极小值点就可以。三分+暴力枚举,在此不多说了。至于可能解不唯一。我是尽量取小的,感觉測试数据非常水的。

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    using namespace std;
    
    const int MAXN=100000+100;
    const double eps=1e-8;
    struct Point
    {
    	int x,y;
    }myPoint[MAXN];
    int n;
    
    double GetDis(double st)
    {
    	double ans=0;
    	for(int i=0;i<n;i++)
    		ans+=sqrt((1.0*myPoint[i].x-st)*(1.0*myPoint[i].x-st)+1.0*myPoint[i].y*myPoint[i].y);
    	return ans;
    }
    
    int main()
    {
    	int cas,i,tag=0;
    	double minX,maxX;
    	cin>>cas;
    	while(cas--)
    	{
    		scanf("%d",&n);
    		minX=100000000.0;
    		maxX=-100000000.0;
    		for(i=0;i<n;i++)
    		{
    			scanf("%d%d",&myPoint[i].x,&myPoint[i].y);
    			if(minX>myPoint[i].x)
    			  minX=myPoint[i].x;
    			if(maxX<myPoint[i].x)
    				maxX=myPoint[i].x;
    		}
    
    		double midl,midr,le,re,lme,rme;
    		while(maxX-minX>eps)
    		{
    			midl=(minX+maxX)/2;
    			midr=(midl+maxX)/2;
    	      	lme=GetDis(midl);
    			rme=GetDis(midr);
    			if(lme>rme)
    				minX=midl;
    			else maxX=midr;
    		}
    		printf("Case %d: %.6lf
    ",++tag,maxX);
    	}
    	return 0;
    }


     

  • 相关阅读:
    AAC音频格式分析与解码
    SIGPIPE信号
    可变参数的宏定义
    Makefile条件编译debug版和release版
    Linux下查看内存使用情况
    Trie树 字典树
    C/C++随机数生成 rand() srand()
    关于编译安装Thrift找不到libthriftnb.a的问题
    Linux下使用popen()执行shell命令
    WebSocket协议分析
  • 原文地址:https://www.cnblogs.com/tlnshuju/p/7169536.html
Copyright © 2020-2023  润新知