题意:
百慕大的每一座城市都坐落在一维直线上。这个国家的*决定建造一个新的广播电视台。经过了许多次试验后,百慕大的科学家们提出了一个结论,在每座城市的不满意度等于这座城市的市民数与这座城市与广播电视台的距离的乘积。找到这个一维直线上的一点来建造广播电视台,使得所有城市的不满意度的和最小。
输入格式 输入的第一行是一个正整数N(0<N<15000) 表示百慕大的城市数。下面N个点对 (X, P) 表示城市 (0<X, P<50000), X 是这座城市的坐标,P是市民数。所有的数都用一个空格分隔开。
输出格式 输出最好的电视台的位置,精确到10^(-5)
Sample Input
4
1 3
2 1
5 2
6 2
Sample Output
3.00000
带权中位数,一波水过
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
struct node{
int x,p,s;
};
node f[];
int n;
int cmp(node a,node b){
return a.x<b.x;
}
int main(){
cin>>n;
for(int i=;i<=n;i++) cin>>f[i].x>>f[i].p;
sort(f+,f++n,cmp);
for(int i=;i<=n;i++) f[i].s=f[i-].s+f[i].p;
double mid=f[n].s*1.0/;
for(int i=;i<=n;i++)
if(f[i].s>=mid){
cout<<f[i].x<<".00000";
return ;
}
}