• 数学 + 带权中位数


    Telecasting station 

    Problem's Link


     

    Mean: 

    百慕大的每一座城市都坐落在一维直线上,这个国家的政府决定建造一个新的广播电视台。

    经过了许多次试验后,百慕大的科学家们提出了一个结论:在每座城市的不满意度等于这座城市的市民数与这座城市与广播电视台的距离的乘积.

    你需要找到这个一维直线上的一点来建造广播电视台,使得所有城市的不满意度的和最小.

    analyse:

    个人觉得应该是加权平均数,然而却是求中位数.

    可以这样想:随便挑一个点作为station,左右移动一下看看移动之后能够减少多少不满同时又会增加多少不满就可以做了.

    Time complexity: O(N)

     

    view code

    /**
    * -----------------------------------------------------------------
    * Copyright (c) 2016 crazyacking.All rights reserved.
    * -----------------------------------------------------------------
    *       Author: crazyacking
    *       Date  : 2016-01-07-09.46
    */
    #include <queue>
    #include <cstdio>
    #include <set>
    #include <string>
    #include <stack>
    #include <cmath>
    #include <climits>
    #include <map>
    #include <cstdlib>
    #include <iostream>
    #include <vector>
    #include <algorithm>
    #include <cstring>
    using namespace std;
    typedef long long(LL);
    typedef unsigned long long(ULL);
    const double eps(1e-8);

    const int MAXN=15010;
    struct N
    {
       double x;
       int p;
    } a[MAXN];
    int b[MAXN];

    int cmp(N a,N b)
    {
       return a.x<b.x;
    }
    int main()
    {
       int n;
       while(scanf("%d",&n)!=EOF)
       {
           memset(b,0,sizeof(b));
           for(int i=0; i<n; i++)
               scanf("%d%d",&a[i].x,&a[i].p);
           sort(a,a+n,cmp);
           int s=0;
           for(int i=0; i<n; i++)
           {
               s+=a[i].p;
               b[i]=s;
           }
           int mid=s/2,w;
           for(int i=0; i<n; i++)
           {
               if(b[i]>=mid)
               {
                   w=i;
                   break;
               }
           }
           printf("%d ",a[w].x);
       }
       return 0;
    }
  • 相关阅读:
    深入理解JVM(二)--对象的创建
    深入理解JVM(一) -- 自动内存管理机制
    代理模式(Proxy)
    心知天气数据API 产品的高并发实践
    Jenkins 构建踩坑经历
    log4net SmtpAppender 踩坑总结
    从 ASP.NET Core 2.1 迁移到 2.2 踩坑总结
    在Windows上安装 Consul
    redis-desktop-manager 0.9.3 安装(最后一个免费版本)
    在Windows上安装Redis
  • 原文地址:https://www.cnblogs.com/crazyacking/p/5109010.html
Copyright © 2020-2023  润新知