114. Telecasting station
time limit per test: 0.25 sec.
memory limit per test: 4096 KB
Every city in Berland is situated on Ox axis. The government of the country decided to build new telecasting station. After many experiments Berland scientists came to a conclusion that in any city citizens displeasure is equal to product of citizens amount in it by distance between city and TV-station. Find such point on Ox axis for station so that sum of displeasures of all cities is minimal.
Input
Input begins from line with integer positive number N (0<N<15000) – amount of cities in Berland. Following N pairs (X, P) describes cities (0<X, P<50000), where X is a coordinate of city and P is an amount of citizens. All numbers separated by whitespace(s).
Output
Write the best position for TV-station with accuracy 10-5.
Sample Input
4 1 3 2 1 5 2 6 2
Sample Output
3.00000题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=114
题目大意:
百慕大的每一座城市都坐落在一维直线上。这个国家的政府决定建造一个新的广播电视台。经过了许多次试验后,百慕大的科学家们提出了一个结论,在每座城市的不满意度等于这座城市的市民数与这座城市与广播电视台的距离的乘积。找到这个一维直线上的一点来建造广播电视台,使得所有城市的不满意度的和最小。
解题记录:
裸的带权中位数
sub1 AC 31ms 230kb
解题报告:
带权中位数
代码:
#include <cstdio>
#include <algorithm>
using namespace std;
struct typ1{
double x;
int p;
}a[15010];
int n, sum=0;
bool cmp(typ1 a, typ1 b) {
return (a.x < b.x)? true:false;
}
void init() {
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%lf%d", &a[i].x, &a[i].p);
sum += a[i].p;
}
sort(a+1, a+n+1, cmp);
}
void solve() {
sum = sum/2+1;
int tmp=0;
for (int i = 1; i <= n; i++) {
tmp += a[i].p;
if (tmp >= sum) {
printf("%.5lf\n", a[i].x);
return;
}
}
}
int main() {
init();
solve();
}