题目链接:Link

Problem

Solution

首先我们可以发现:当安排好一个对应的移动方案后,每个士兵的移动的最短距离必然是一个曼哈顿距离。
设从左到右依次对应的士兵分别位于 $ (x_1,y_1),(x_2,y_2),...,(x_n,y_n) $ ,则答案为 $ \sum_{i=1}^n { \left| y-y_i \right| } + \sum_{i=1}^n { \left| x+i-1-x_i \right| } $
于是我们可以发现,y轴上的答案和x轴上的答案可以分开统计。不难得出如下贪心策略:将\(x_i\)从小到大排序。然后x轴上的答案就可以转换成$ \sum_{i=1}^n { \left| x-(x_i+1-i) \right| } $。
然后这个问题就被转换成了2个货仓选址问题。

Code

#include<cstdio>
#include<algorithm>
using std::sort;
typedef long long LL;
const int maxn=10005;
int n,x[maxn],y[maxn];
inline LL abs(const LL &x) { return x>0?x:-x; }
int main()
{
#ifdef localfreopen("pro.in","r",stdin);
#endifscanf("%d",&n);for(int i=1;i<=n;i++) scanf("%d %d",&x[i],&y[i]);sort(x+1,x+n+1);for(int i=1;i<=n;i++) x[i]+=1-i;sort(x+1,x+n+1); sort(y+1,y+n+1);LL res=0,tx=x[(n+1)/2],ty=y[(n+1)/2];for(int i=1;i<=n;i++) res+=abs(x[i]-tx)+abs(y[i]-ty);printf("%lld\n",res);return 0;
}

转载于:https://www.cnblogs.com/happyZYM/p/11379626.html

题解 POJ1723 【SOLDIERS】相关推荐

  1. poj1723 SOLDIERS(思维题-中位数/货仓选址问题)

    题目 n(n<=1e4)个士兵,第i个士兵的位置(xi,yi),-1e4<=xi,yi<=1e4 把士兵安排到同一条水平线上,使之在竖直方向n个士兵相邻 最后排成(x,y),(x+1 ...

  2. poj1723 Soldiers(中位数)

    题目链接 题意 给出n个点的坐标,它们只能往上.下.左.右一格一格地移动,求使其移动至水平线上的最小步数. 题解 因为我们最终安排的纵坐标是固定的,设纵坐标为yyyyyy,那么我们希望min⁡∣y[i ...

  3. poj1723 SOLDIERS

    看错题了无语...还以为只要在一排并且每个位置最多为1个士兵就可以... 原来是(x,y), (x+1,y), ..., (x+N-1,y), y取中点,x先减i,再去中点. 就是贪心- #inclu ...

  4. POJ1723 Soldiers 中位数

    题目链接 http://poj.org/problem?id=1723 分析 求排成一行的最少操作步数,其横坐标的相对位置肯定不变. 设从 x0x_0x0​ 往后排,则使横坐标符合要求的操作步数为 ∑ ...

  5. 《算法竞赛进阶指南(by 李煜东)》习题题解 集合

    又是笔者给自己挖的大坑. 这里是李煜东所著<算法竞赛进阶指南(by 李煜东)>的习题题解集合. 有任何错误请在对应文章下反馈或联系 nicest1919@163.com ,谢谢 qwq 从 ...

  6. ACM基础与精选2018

    会津大学基础题 AOJ0001 List of Top 3 Hills[水题] AOJ0002 Digit Number[水题] AOJ0005 GCD and LCM[GCD+LCM] AOJ000 ...

  7. 【POJ1723】SOLDIERS(中位数,货仓选址)

    problem 平面上有N(N<=10000)个点 求这些点变成一条水平线的最小移动步数 solution 对于y轴,易证得在中位数处取到最优,直接排序统计即可. 对于x轴,因为要保证相对顺序, ...

  8. G - SOLDIERS POJ - 1723 sort+数学

    G - SOLDIERS POJ - 1723 题解 好妙啊! 由于与路径没啥关系,走折线即可 先找出 y 的中位数,全部走到中位数的位置 对 x ,先排序,再构造一个 temp[i] = x[i] ...

  9. POJ 1723 Soldiers (中位数)

    $ POJ~1723~Soldiers $ (中位数) $ solution: $ 这道题说难也不算太难,但是当时自己想的很矛盾.所以还是列一篇题解. 这道题首先比较容易看出来的就是:行和列是两个分开 ...

最新文章

  1. windows下带超时的telnet探测IP和端口
  2. PowerDesigner16中的对象无效,不允许有扩展属性 问题的解决
  3. http 路径 |_HTTP 请求與响应的格式及 curl 命令使用
  4. python学习笔记--迭代器
  5. 构建一个文本搜索系统
  6. SSH 上传下载文件
  7. Springboot+多线程+等待获取执行结果
  8. PowerDesigner name与code同步问题
  9. FPM一:简单的road map(GAF)
  10. ubuntu一些记录
  11. CMake3.19.2下载
  12. Saleh-Valenzuela 毫米波信道模型
  13. cad卸载工具_使用感极好的5款软件分享,款款高逼格,下载之后就没舍得卸载...
  14. 软件测试从入门到入职,自学规划真的很重要~
  15. 任正非评华为HR胡玲事件,元芳你怎么看?
  16. linux c语言内核函数手册,Linux C函数实例速查手册
  17. 如何制作mp3音频文件?分享制作mp3的简单方法
  18. 华为过程可信cib是指_华为流程规范考.doc
  19. python爬虫去哪儿网_用python爬虫爬取去哪儿4500个热门景点,看看国庆不能去哪儿...
  20. 刀片之家礼品兑换帮助

热门文章

  1. DATA abort定位方法
  2. 人生之路 — 方式方法很重要
  3. 有什么性价比高的运动蓝牙耳机值得推荐?双十一运动装备必选!
  4. MySQL触发器更新和插入操作
  5. CCF-CSP 如何刷题?
  6. iview的Affix组件没有按照预期效果固定
  7. 单词记忆系统三:优化音标输入(允许键盘字符直接输入和音标序号混合输入)
  8. c语言输出数字漏斗图形_2019级C语言大作业 - 十步万度
  9. linux 设备简介
  10. CodeForces-1379C Choosing flowers