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 }

 

转载于:https://www.cnblogs.com/Missa/archive/2013/03/14/2960528.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值