sgu 114(带权中位数)
显然当每个城市只有一个人的时候。取中位数即可。
同样。多个人的话可以看成多个人是多个城市在同一个地方。
于是得出答案。
1 // File Name: 114.cpp 2 // Author: Missa 3 // Created Time: 2013/3/14 星期四 22:36:36 4 5 #include<iostream> 6 #include<cstdio> 7 #include<cstring> 8 #include<algorithm> 9 #include<cmath> 10 #include<queue> 11 #include<stack> 12 #include<string> 13 #include<vector> 14 #include<cstdlib> 15 #include<map> 16 #include<set> 17 using namespace std; 18 #define CL(x,v) memset(x,v,sizeof(x)); 19 #define R(i,st,en) for(int i=st;i<en;i++) 20 #define ll long long 21 #define inf 0x3f3f3f3f 22 23 const int maxn = 1e4+5e3+5; 24 struct node 25 { 26 double pos; 27 ll p; 28 }c[maxn]; 29 bool cmp(const node & a,const node & b) 30 { 31 return a.pos < b.pos; 32 } 33 int n; 34 35 int main() 36 { 37 while(~scanf("%d",&n)) 38 { 39 ll sum=0,tmp=0; 40 R(i,0,n) 41 { 42 scanf("%lf%I64d",&c[i].pos,&c[i].p); 43 sum+=c[i].p; 44 } 45 sort(c,c+n,cmp); 46 sum/=2; 47 R(i,0,n) 48 { 49 if(tmp+c[i].p>=sum) 50 { 51 printf("%.5f\n",c[i].pos); 52 break; 53 } 54 tmp+=c[i].p; 55 } 56 } 57 return 0; 58 }