题目描述: 在一个划分成网格的操场上,n个士兵散乱地站在网格点上。网格点用整数坐标(x,y)表示。士兵们可以沿网格边往上、下、左、右移动一步,但在同一时刻任一网格点上只能有一名士兵。按照军官的命令,士兵们要整齐地列成一个水平队列,即排列成(x,y),(x+1,y),…,(x+n-1,y)。如何选择x和y的值才能使士兵们以最少的总移动步数排成一行。

题目要求: 编程计算使所有士兵排成一行需要的最少移动步数。

输入格式:
第1行是士兵数n,1≤n≤10000。接下来n行是士兵的初始位置,每行有2个整数x和y,-10000≤x,y≤10000。

输出格式:
一个数据,即士兵排成一行需要的最少移动步数。

输入样例:
5
1 2
2 2
1 3
3 -2
3 3

输出样例:
8

思路:
看本题可看看 铺设油井管道 一题,类似只考虑y的简化版。即会明白对于本题来说,x和y可以视为不相关(但类似)的两部分。

一:对于y 要使每个点移动路径最短,找出中位点,再计算每个点到中位点的距离求和即可。类似于求解 | x - 4 | + | 7 - x | + | 10 - x |最小值的问题,结果应该是当取到所有零点的中位数时,整体的值最小。(不明白可多取几个例子画图观察)
即表达式为:|y0-y|,|y1-y|…|y(n-1)-y|。

二:对于x 取最短路径和,总得来说还是与中位点有关。

计士兵原本处于:x0,x1,x2…x(n-1)(当然从1-n也可)。
计最后士兵位置为: x,x+1,x+2…x+(n-1)。
那么每个点移动的距离为:|x0-x|,|x1-(x+1)|,|x2-(x+2)|…|x(n-1)-(x+(n-1))|。
整理得:|x0-x|,|(x1-1)-x|,|(x2-2)-x|…|x(n-1)-(n-1)-x|。
接下来只需要找到前面零点部分的中位点带入x,即可得到结果。

#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
int x[10005], y[10005];
int main()
{int n;long long ans = 0;cin >> n;for (int i = 0; i < n; i++){cin >> x[i] >> y[i];}sort(y, y + n);sort(x, x + n);int item = y[n / 2];//取中位点for (int i = 0; i < n; i++){ans += abs(y[i] - item);//取绝对值x[i] -= i;//对x按照计算式进行处理}item = x[n / 2];//此时序列一定还为从小到大,不用再次排序for (int i = 0; i < n; i++)ans += abs(x[i] - item);cout << ans << endl;return 0;
}

士兵排队(分治思想)相关推荐

  1. 线性时间选择算法的分治思想:邮局选址问题和士兵战队问题

    一. 实验题目 1. 邮局选址问题 在一个按照东西和南北方向划分成规整街区的城市里,n 个居民点散乱地分 布在不同的街区中.用 x 坐标表示东西向,用 y 坐标表示南北向.各居民点的 位置可以由坐标( ...

  2. 006.递归和分治思想

    为什么80%的码农都做不了架构师?>>>    斐波那契数列的递归实现  迭代实现  递归   1.递归 定义 迭代使用的是循环结构. 递归使用的是选择结构. 优点 使用递归 ...

  3. 递归和分治思想及其应用

    目录 递归和分治思想 一些实例 逆序输出字符串 查找数组元祖是否存在 汉诺塔问题 八皇后问题 更多: 递归和分治思想 如果可以使用迭代,尽量别使用递归.由编译原理可以知道,每次自调用的时候,计算机都需 ...

  4. 【算法】学习笔记(4):分治思想 归并排序

    分治思想,分治策略,自古有之,与人类生活息息相关,其本质是将大问题拆解为小问题,小问题转换为已知解的问题,进而求解. 军队管理,国家分级治理-- 大规模数据排序,例如10000000000万个数,规模 ...

  5. 使用分治思想求解最大子序列

    本文使用分治思想求解一个整型数组中的最大子序列,该算法的时间复杂度为NlogN,使用千万级的数据量计算结果的时间不超过0.5s.该算法使用了分治的思想:求解最大子序列的问题可以理解为将整个数组分成左右 ...

  6. 算法设计与分析:分治思想 - 入门

    文章目录 分治思想 判断分治的条件 分治思想在排序问题的应用 求逆序对的个数 分治总结 本文参考UCAS卜东波老师的计算机算法设计与分析课程完成 分治思想 分治思想可以归纳为两点: 将一个复杂问题化简 ...

  7. 用JDevelop编程软件运行代码:韩信点兵,韩信有一队兵,他想知道有多少人,便让士兵排队报数:

    作业:韩信有一队兵,他想知道有多少人,便让士兵排队报数: 按从 1 到 5 报,最末一个士兵报的数为 1 :按从 1 到 6 报, 最后一个士兵报的数为 5 ,按从 1 到 7 报,最末一个士兵 报的 ...

  8. POJ 1723 士兵排队 C语言实现

    ** POJ 1723 士兵排队 C语言实现 ** ** 原文 ** Description N soldiers of the land Gridland are randomly scattere ...

  9. 汉诺塔问题——分治思想

    汉诺塔规则如下: 1.有三根相邻的柱子,标号为x,y,z. 2.x柱子上从下到上按金字塔状叠放着n个不同大小的圆盘. 3.现在把所有盘子一个一个移动到柱子z上,并且每次移动同一根柱子上都不能出现大盘子 ...

最新文章

  1. 对Android GPS获取位置信息的新研究.
  2. LinkedHashMap源码剖析
  3. 广佛肇城轨年内通车 佛山西站预计2017年中通车
  4. Codeigniter CRUD代码快速构建
  5. 的向上取整函数_计算机二级Excel常用函数解析
  6. 分享一套基于SpringBoot和Vue的企业级中后台开源项目,代码很规范!
  7. 五、扩展Orchard(五) Writing a Content Part
  8. C++常用数据类型和Windows常见数据类型
  9. word图片撑满,word怎么让图片占满整个页面?
  10. 基于CAA的CATIA二次开发环境搭建全过程(亲测可用)
  11. flexbox_Flexbox对准综合指南
  12. Vue 2.0 升(cai)级(keng)之旅
  13. python对excel筛选提取文本中数字_详解利用python提取pdf文本数字
  14. LIO-SAM imuPreintegration
  15. Wolfram Mathematica学习笔记1
  16. 亚马逊云科技的区域和可用区概念解释
  17. SCB_SCR寄存器
  18. 英文歌曲:What I Have Done(变形金刚第一部主题曲)
  19. RNA-ATTO 390|RNA-ATTO 425|RNA-ATTO 465|RNA-ATTO 488|RNA-ATTO 495|RNA-ATTO 520近红外荧光染料标记核糖核酸RNA
  20. 敏捷开发之一—笼统的介绍

热门文章

  1. 什么行业前景好最赚钱?来看看,这十大最赚钱的行业!
  2. Android 实现类似Excel表格,且表格能左右、上下滑动,可修改分割线颜色
  3. 第10章第18节:使用iSlide的全图幻灯片命令将所有内容都转为图片 [PowerPoint精美幻灯片实战教程]
  4. ODOO开发教程之透视表
  5. 运维服务器告警规则阈值,运维告警管理困难重重,我是怎么做到的
  6. 阿里云Linux挂载新磁盘
  7. 百万级日活 App 的屏幕录制功能是如何实现的
  8. 这些华为手机的隐藏技巧你知道吗?
  9. 实时数据融合之道:博观约取,价值驱动
  10. 抖音开始封杀所有站外引流渠道!