• 带权中位数


    话说在3085年,外星人打算来入侵地球,这个消息被我国的情报部门秘密截获,于是便打算联系世界各个国家,一
    起研究商量对策。由于每个国家所需派的技术员人数不同,所以目前无法决定到底要在哪个国家设置个研究所进行
    研究,幸运的是所有国家都在一条直线上,现在知道每个国家与我国的距离和该国的研究员人数。请你为他们决定
    一下到底在那个国家建立研究所可以使所有研究员集中到该国的费用最小。

    Input

    输入文件每一行描述一个国家的信息。
    首先是该国派出的技术员人数,紧跟着的是这个城市相对于我国的距离,最后是国家的名称。
    国家数不大于5000

    Output

    输出文件只需要一行,即研究所设定的国家名称。

    Sample Input

    7 9289 JAPAN
    5 8523 AMERICA
    3 5184 CHINA
    8 2213 VIJOS
    10 0 DDS
    

    Sample Output

    VIJOS


    sol:本题每个国家增加了人数,即给每个点分配了权值,这时我们就不能选点的中位数,而要选各个点的权值和的中位数,即带权中位数。
     1 #include<iostream>
     2 #include<string>
     3 #include<algorithm>
     4 using namespace std;
     5 const int maxn = 5010;
     6 struct Country
     7 {
     8   double p, dis;
     9   string name;
    10   bool operator < (const Country& a) const
    11   {
    12     return dis < a.dis;
    13   }
    14 }C[maxn];
    15 int n = 0;double sum=0,ans=0;
    16 int main()
    17 {
    18   while(cin >> C[n].p >> C[n].dis >> C[n].name)
    19   {
    20       sum+=C[n].p;//求出各个国家的人数和
    21       n++;
    22   }   
    23   sum=sum/2+1; //计算后的sum为带权中位数
    24   sort(C, C + n);//按距离从小到大排序
    25   for(int i=0;i<n;i++)//在排序后的国家中找第一个大于等于sum的,该国家即为答案
    26     {
    27         ans+=C[i].p;
    28         if (ans>=sum) 
    29         {
    30             cout<<C[i].name;
    31             return 0;
    32         }
    33     }
    34 }
  • 相关阅读:
    0209利用innobackupex进行简单数据库的备份
    0208如何利用federated配置远程的数据库和本地数据相互交互
    0208MySQL5.7之Group Replication
    解决问题的方法
    0123简单配置LNMP
    0120Keeplived实现自动切换Mysql服务
    0116MySql主从复制监控
    大数据导入EXCEL
    OSI结构和TCP/IP模型
    ORA-12154 TNS无法解析指定的连接标识符
  • 原文地址:https://www.cnblogs.com/cutepota/p/12126278.html
Copyright © 2020-2023  润新知