HDU 1173 采矿

采矿

题解:如果给你一条线段(左右端点设为A,B), 那么在这条线上的任意一点到A B距离之和是一个定值, 然后如果再这条线段内在任意确定一个定点C, 那么这条线段上再任意取一个点,这个点到 A B C距离最小的点是和C点重合的位置, 因为AB距离为定制。

所以给你一堆点在一条直线上, 那么所有距离之和小就是最中间的点。

代码:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 double x[1000005],y[1000005];
 4 int main()
 5 {
 6     int t;
 7     while(~scanf("%d",&t)&&t)
 8     {
 9         for(int i = 0; i < t; i++)
10             scanf("%lf%lf",&x[i],&y[i]);
11         sort(x,x+t);
12         sort(y,y+t);
13         printf("%.2f %.2f
",x[(t+1)/2],y[(t+1)/2]);
14     }
15     return 0;
16 }
原文地址:https://www.cnblogs.com/MingSD/p/8462354.html