F - F HDU - 1173

一个邮递员每次只能从邮局拿走一封信送信。在一个二维的直角坐标系中,邮递员只能朝四个方向移动,正北、正东、正南、正西。

有n个需要收信的地址,现在需要你帮助找到一个地方建设邮局,使得邮递员送往n个地址的路程之和最短。

Input 多组输入,每组数据的第一行一个整数

n(0<n<1000000),表示地址有n个。在接下来的n行中,每行有两个实数x,y,表示其中一个收信地址的坐标。n = 0时输入结束。

(实数范围原题没给出,c++ double存储够用,运算后自行避免精度问题)

Output 每组输入,输出两个实数x,y(保留两位),代表邮局位置。如果坐标不唯一输出其中一个最优解即可。

Sample Input
4
1.0 1.0
3.0 1.0
3.0 3.0
1.0 3.0
0
Sample Output
2.00 2.00

思路

  • 分析:首先明白我们选的某个位置(x,y),无论在x轴方向,无论我们让x等于什么? 都不会影响在y轴方向的总的最小和距离,同y坐标也不会影响在x轴方向的总水平和距离,剩下的就是单独讨论水平、竖直方向的情况

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<map>
#include<string>
#include<stack>
#include<vector>
#include<queue>
using namespace std;
#define ll long long
#define INF 1e9
#define db double
const int Len = 1000005;
db x[Len];
db y[Len]; db Solve(db a[], int n)
{
sort(a + 1, a + 1 + n);
if(n % 2)
return a[n/2 + 1];
return (a[n/2] + a[n/2 + 1])/2;
} int main()
{
/* freopen("A.txt","r",stdin); */
/* freopen("Ans.txt","w",stdout); */
int n;
while(scanf("%d", &n) && n)
{ for(int i = 1; i <= n; i ++)
scanf("%lf %lf", &x[i], &y[i]);
printf("%.2f %.2f\n", Solve(x, n), Solve(y, n));
} return 0;
}

最新文章

  1. 1.ASP.NET MVC使用EPPlus,导出数据到Excel中
  2. Network Alignment(网络比对)模型
  3. linux新增用户并增加sudo权限
  4. java servlet的工作原理
  5. Android 实现子View的状态跟随父容器的状态
  6. 一位iOS教育类应用开发者是如何赚到60多万美元?
  7. java学习路线(好资源大家分享)
  8. [转] POJ 题目分类
  9. 推荐一款JSON字符串查看器
  10. iOS——protoco和delegate (事件代理)
  11. 自己总结的ruby on rails 查询方法
  12. hdu 4778 Gems Fight! 状态压缩DP
  13. python高级编程1
  14. 30天代码day3 Intro to Conditional Statements
  15. [Hive_add_11] Hive 使用 UDTF 实现日志降维
  16. Zabbix历史数据清理
  17. 重写comparater比较器
  18. javaSE习题 第三章 运算符、表达式和语句
  19. 20190104xlVBA_在课表里标记自己的课程
  20. PDB、PD、PMP、RTB哪个更好?为品牌主解锁程序化购买的选择技巧

热门文章

  1. web前端问题整理
  2. 1,Linux(CentOS)中的基本配置
  3. ASP.NET Core 中jwt授权认证的流程原理
  4. 曹工说mini-dubbo(1)--为了实践动态代理,我写了个简单的rpc框架
  5. String的那些事
  6. windows git pull或者push代码时弹出安全框解决办法
  7. LeetCode-最长回文串
  8. Python基础篇(五)_文件和数据格式化
  9. Python科学计算库SymPy初探
  10. vue 组件通讯方式到底有多少种 ?