带权中位数
Posted cutepota
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带权中位数相关的知识,希望对你有一定的参考价值。
话说在3085年,外星人打算来入侵地球,这个消息被我国的情报部门秘密截获,于是便打算联系世界各个国家,一
起研究商量对策。由于每个国家所需派的技术员人数不同,所以目前无法决定到底要在哪个国家设置个研究所进行
研究,幸运的是所有国家都在一条直线上,现在知道每个国家与我国的距离和该国的研究员人数。请你为他们决定
一下到底在那个国家建立研究所可以使所有研究员集中到该国的费用最小。
起研究商量对策。由于每个国家所需派的技术员人数不同,所以目前无法决定到底要在哪个国家设置个研究所进行
研究,幸运的是所有国家都在一条直线上,现在知道每个国家与我国的距离和该国的研究员人数。请你为他们决定
一下到底在那个国家建立研究所可以使所有研究员集中到该国的费用最小。
Input
输入文件每一行描述一个国家的信息。
首先是该国派出的技术员人数,紧跟着的是这个城市相对于我国的距离,最后是国家的名称。
国家数不大于5000
首先是该国派出的技术员人数,紧跟着的是这个城市相对于我国的距离,最后是国家的名称。
国家数不大于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/=2; sum++; 24 sort(C, C + n); 25 for(int i=0;i<n;i++) 26 { 27 ans+=C[i].p; 28 if (ans>=sum) 29 { 30 cout<<C[i].name; 31 return 0; 32 } 33 } 34 }
以上是关于带权中位数的主要内容,如果未能解决你的问题,请参考以下文章