pku 1723——士兵战队问题

Description

N soldiers of the land Gridland are randomly scattered around the country.
A position in Gridland is given by a pair (x,y) of integer coordinates. Soldiers can move - in one move, one soldier can go one unit up, down, left or right (hence, he can change either his x or his y coordinate by 1 or -1).

The soldiers want to get into a horizontal line next to each other (so that their final positions are (x,y), (x+1,y), ..., (x+N-1,y), for some x and y). Integers x and y, as well as the final order of soldiers along the horizontal line is arbitrary.

The goal is to minimise the total number of moves of all the soldiers that takes them into such configuration.

Two or more soldiers must never occupy the same position at the same time.

Input

The first line of the input contains the integer N, 1 <= N <= 10000, the number of soldiers.
The following N lines of the input contain initial positions of the soldiers : for each i, 1 <= i <= N, the (i+1)st line of the input file contains a pair of integers x[i] and y[i] separated by a single blank character, representing the coordinates of the ith soldier, -10000 <= x[i],y[i] <= 10000.

Output

The first and the only line of the output should contain the minimum total number of moves that takes the soldiers into a horizontal line next to each other.

Sample Input

51 22 21 33 -23 3

Sample Output

8

一 士兵有多种移动方式
通过适当的移动顺序和移动路线可以使得同一时刻不会有两名士兵站在同一点
二 题目要求最佳移动方式(即求移动的最少步数)
题目要求转化为求士兵站立的“最终位置”,即如何取“最终位置”使得士兵移动的步数最少(最优)
Y轴方向上的考虑
设目标坐标为M,即n个士兵最终需要移动到的Y轴的坐标值为M
n个士兵的Y轴坐标分别为:
Y0,Y1,Y2 …… …… Yn-1
则最优步数S=|Y0-M|+|Y1-M|+|Y2-M|+ …… …… +|Yn-1-M|
结论:M取中间点的值使得S为最少(最优)
证明:……
从最上和最下的两个士兵开始递推……
最优位置
最优位置
归结到最后,处于中间位置的士兵的Y轴坐标值就是“最终位置”的Y轴坐标
可能有两种情况
士兵总数为双数情况:取中间两点间的任意一个位置
士兵总数为单数情况:取中间点的所在位置
解决办法:对所有的Y轴坐标进行排序(O(nlogn))或者进行线性时间选择(O(n))
然后取“中间”点的Y轴坐标值作为最佳位置M的值
最后通过公式求出Y轴方向上移动的最优步数
X轴方向上的考虑
首先需要对所有士兵的X轴坐标值进行排序
然后,按从左至右的顺序依次移动到每个士兵所对应的“最终位置”(最优),所移动的步数总和就是X轴方向上需要移动的步数
例,最左的士兵移动到“最终位置”的最左那位,第二个士兵移动到“最终位置”的第二位
则总的步数为:士兵一移动步数+士兵二移动步数+ …… +士兵n移动步数
如何确定X轴方向上的最佳的“最终位置”?
共n个士兵
他们相应的X轴坐标为:X0,X1,X2 …… …… Xn-1
设,士兵需要移动到的“最终位置”的X轴坐标值为:k,k+1,k+2 …… …… k+(n-1)
则所求最优步数S=|X0-k|+|X1- (k+1) |+|X2-(k+2)|+ …… +|Xn-1-(k+(n-1))|
经过变形S=|X0-k|+|(X1-1)-k|+|(X2-2)-k|+ …… …… +|(Xn-1-(n-1))-k|
注意到公式的形式与Y轴方向上的考虑一样,同样是n个已知数分别减去一个待定数后取绝对值,然后求和
因此还是采用取中位数的办法求得k值,最后算出最优解

中位数的应用—士兵站队问题相关推荐

  1. POJ - 1723 Soldiers 士兵站队 排序+中位数

    [问题描述] 在一个划分成网格的操场上,n个士兵散乱地站在网格点上.网格点由整数最表(x,y)表示.士兵可以沿着网格边上.下.左.右移动一步,但在同一时刻一个网格上只能有一名士兵.按照军官的命令,士兵 ...

  2. 算法设计与分析: 2-7 士兵站队问题

    2-7 士兵站队问题 问题描述 在一个划分成网格的操场上,n个士兵散乱地站在网格点上.网格点由整数坐标(x,y)表示.士兵们可以沿网格边上.下.左.右移动一步,但在同一时刻任一网格点上只能有一名士兵. ...

  3. luogu1889 士兵站队

    luogu1889  士兵站队​​​​​​​ 时空限制    1000ms/128MB 题目描述 在一个划分成网格的操场上, n个士兵散乱地站在网格点上.由整数 坐标 (x,y) 表示.士兵们可以沿网 ...

  4. 【排序专训】练习题 士兵站队(中位数应用) 解题报告

    [问题描述]      在一个划分成网格的操场上,n个士兵散乱地站在网格点上.网格点由整数最表(x,y)表示.士兵可以沿着网格边上.下.左.右移动一步,但在同一时刻一个网格上只能有一名士兵.按照军官的 ...

  5. POJ1723士兵站队问题

    题目简述: POJ1723,N名士兵分散在不同位置,各自具有不相同的坐标{x,y},士兵每次可以沿x或y轴移动一步,若命令士兵沿平行x轴的方向排成一列,且移动过程中士兵位置不可重合,求N个士兵移动总数 ...

  6. 【P1889 士兵站队】(洛谷)

    题目描述 在一个划分成网格的操场上,n个士兵散乱地站在网格点上,由整数坐标 (x,y)表示. 士兵们可以沿网格边上.下.左.右移动一步,但在同时刻任一网格点上只能有 1 名士兵. 按照军官的命令,们要 ...

  7. 【日常学习】【数学】codevs3625 士兵站队问题题解

    题目描述 Description 在一个划分成网格的操场上,n个士兵散乱地站在网格点上.网格点用整数坐标(x,y)表示.士兵们可以沿网格边往上.下.左.右移动一步,但在同一时刻任一网格点上只能有一名士 ...

  8. 《Free Pascal 语言与基础算法》_数据排序_9_士兵站队问题题解

    题目描述 在一个划分成网格的操场上,n个士兵散乱地站在网格点上.网格点用整数坐标(x,y)表示.士兵们可以沿网格边往上.下.左.右移动一步,但在同一时刻任一网格点上只能有一名士兵.按照军官的命令,士兵 ...

  9. 士兵站队(pku1723)

    http://acm.pku.edu.cn/JudgeOnline/problem?id=1723 一个定理:S=|x1-k|+|x2-k|+...+|xn-k|,当k为序列x的中位数时,S取最小值. ...

最新文章

  1. Redis常见面试问题汇总及解析
  2. 第二阶段第八次spring会议
  3. 将某表一行数据的某些字段插入到该表
  4. egg --- 配置连接mysql 创建模型 插入数据
  5. Android 里的数据储存
  6. [html] 在a标签中,怎样防止链接跳转?
  7. c语言void和null,C语言:为什么我得到NULL?
  8. 【logstash】logstash monitor
  9. android定义 task,Android Gradle 自定义Task 详解
  10. 麦克纳姆轮全向移动机器人横向直线运动分析
  11. QT+ 状态栏+核心控件+浮动窗口
  12. 怎么恢复初始状态_长妊娠纹怎么办 产后消除妊娠纹绝招
  13. Cartoon CG:卡通渲染(开篇)
  14. 分布式光伏站远程监控组网方案
  15. CSS 绘制太阳系行星运行轨迹
  16. QuickTime不支持播放HEVC编码mp4/mov视频
  17. 经典网页设计:20个优秀的电子商务网站设计案例
  18. 亚控科技工作中的编程知识小积累
  19. 短视频开发,录制视频添加背景音乐功能实现
  20. DINGWAVE发布口袋式软件无线电解决方案

热门文章

  1. Java游戏开发 —— 象棋
  2. 嵌入式开发中,嵌入式硬件和软件有什么区别?
  3. 网络安全技术 3.28 作业
  4. 前端 sqllite sql.js
  5. 【hash】兔子与兔子(C++)
  6. java编译方法参数(-parameters)名为arg0问题
  7. Error:Module ‘javase‘ production: java.lang.ClassCastException:
  8. vue3 ref 和 reactive 区别
  9. VS2012配置SDL2
  10. Java银行管理系统